Python: Как создать список с парами ключей и значений словаря

#python #list #dictionary #key-value

#python #Список #словарь #ключ-значение

Вопрос:

Как мне создать список с двумя индексами: ключом и дополнительным значением словаря. Ключ и значение должны быть выбраны случайным образом из словаря. Я уже пробовал это с (это мои латинские слова):

 d = {}
d['house'] = "domus, domus"
da1 = d.items()
da = random.sample(wa1,1)
print (da)
 

Когда я делаю это таким образом, я получаю список только с одним индексом: ключом И значением. Но мне нужен список с двумя индексами, чтобы иметь возможность делать:

 dav = da[0]
dal = da[1]

def solution():
    dal = da[1]
    lbl.configure(text=dal)

def continue():
    dav = da[0]
    lbl.configure(text=dav)

lbl = Label(window,text=dav)
lbl.pack()

btnl = Button(window,text="Show solution",command=solution)
btnl.pack()

btnw = Button(window,text="Continue",command=continue)
btnw.pack()
 

Есть ли кто-нибудь, кто может мне помочь?

Комментарии:

1. Что вы подразумеваете под «добавлением»?

2. Можете ли вы показать пример списка?

3. что-то не так с доступом к элементам обычным способом da1[0][0] и da1[0][1] ?

Ответ №1:

Вы получаете обратно список, содержащий кортеж, который сам по себе состоит из двух элементов. Например:

 da == [('house', 'domus, domus')]
 

Вы можете индексировать его, используя два индекса:

 >>> da[0][0]
'house'
>>> da[0][1]
'domus, domus'
 

Если вы хотите создать da список с двумя элементами, вы можете сделать:

 da = [x for x in da[0]]
 

В качестве альтернативы, вы можете просто выдать

 da = random.sample(d.items(),1)[0]    
 

чтобы получить кортеж из двух элементов

 ('house', 'domus, domus')
 

который вы можете превратить в список, list(da) если это требуется.

Комментарии:

1. @user3764728 нет проблем. обратите внимание, что ответ user41047 содержит лучший способ получить ваше da использование random.choice .

Ответ №2:

Вы хотите выбрать случайный элемент, а не случайную выборку:

 >>> import random
>>> d = {'house': 'domus, domus', '???': 'something else'}
 

random.choice возвращает a (key,value) -pair:

 >>> random.choice(d.items())
>>> random.choice(list(d.items())) # python3
('house', 'domus, domus')
 

Который мы можем распаковать, используя синтаксис распаковки кортежей:

 >>> word, solution = random.choice(d.items())
>>> word, solution = random.choice(list(d.items()) # python3
>>> word
'???'
>>> solution
'something else'
 

Также обратите внимание, что continue это ключевое слово python и не может использоваться в качестве имени функции.

Комментарии:

1. Когда я делаю это таким образом, я получаю ошибку ‘TypeError: ‘dict_items’ объект не поддерживает индексацию’ при запуске программы. Определение для решения теперь только ‘lbl.configure(text=solution)’ и def . для continue1 (новое имя команды) — ‘lbl.configure (text=word)’. РЕДАКТИРОВАТЬ: я решил это, выполнив это с помощью «word, solution = random.choice (list (w.items ()))» вместо «word, solution = random.choice (d.items ())». Спасибо за вашу помощь!

2. @user3764728: вы нашли правильное решение — вы используете Python 3, но пользователь41047 использует только Python 2. В 2 .items() возвращает a list .