#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()
возвращает alist
.