【问题标题】:Python: How to create a list with pairs of keys and values of a dictionaryPython:如何使用字典的键和值对创建列表
【发布时间】:2014-08-12 15:35:31
【问题描述】:

如何创建具有两个索引的列表:字典的键和附加值。键和值应该是从字典中随机选择的。我已经试过了(这些是我的拉丁词):

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()

有没有人可以帮助我?

【问题讨论】:

  • “附加”是什么意思?
  • 你能举个例子吗?
  • 以正常方式da1[0][0]da1[0][1] 访问元素有问题吗?

标签: python list dictionary key-value


【解决方案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) 将其列入列表。

【讨论】:

  • @user3764728 没问题。请注意,user41047 的答案包含使用random.choice 获取da 的更好方法。
【解决方案2】:

您想选择一个随机元素,而不是随机样本:

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

random.choice 返回一个(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关键字,不能作为函数名。

【讨论】:

  • 当我这样做时,我在运行程序时收到错误“TypeError: 'dict_items' object does not support indexing”。解决方案的定义现在只有 'lbl.configure(text=solution)' 和 def。对于 continue1(新命令名称)是 'lbl.configure(text=word)'。编辑:我通过使用'word,solution = random.choice(list(w.items()))'而不是'word,solution = random.choice(d.items())'来解决它。感谢您的帮助!
  • @user3764728:您找到了正确的解决方案——您使用的是 Python 3,但 user41047 仅使用 Python 2。在 2 中,.items() 返回一个 list
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
相关资源
最近更新 更多