我在python中有一个dict的词典,用于从dict中获取随机值
words = {0:{"wake up": "aaaa"},
1:{"look after": "bbbb"},
2:{"turn on": "cccc"}
}
我想从字典词
中提取第二个字典(数字键的值)(k, v) = words[random.randint(0, 22)]
但错误是这个
ValueError: need more than 1 value to unpack
为什么我需要其他价值观?
答案 0 :(得分:3)
您正在使用密钥访问字典,该密钥返回 值:
value = words[random.randint(0, 22)]
但如果您的密钥都是整数,那么最好使用列表:
words = [{"wake up": "aaaa"}, {"look after": "bbbb"}, {"turn on": "cccc"}]
value = random.choice(words)
让random.choice()
尽一切努力随意挑选一个。
当然,您仍然可以将random.choice()
与字典值一起使用:
value = random.choice(list(words.values()))
会从字典中返回一个随机值,并且:
key, value = random.choice(list(words.items()))
将为您返回一个随机(key, value)
对。
如果您打算将存储的词典提取到键和值中,则必须从该对象中提取一个键值对;你不能在字典上使用元组解包:
>>> key, value = {'foo': 'bar'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
但这有效:
>>> key, value = next(iter({'foo': 'bar'}.items()))
>>> key, value
('foo', 'bar')
但是,如果您想提取随机键值对,或者将键和值直接存储在words
字典中,也许您应该存储元组而不是字典。
答案 1 :(得分:0)
摘要:方法3是最诡计多端的方式。
如果不对数据结构进行任何修改,以下代码将适用于您:
k, v = words[random.randint(0, 2)].items()[0]
但是,这不是最好的(和pythonic)方式。
如果你的内部字典总是有一个键值对,那么就没有必要把它作为一个字典。相反,将内部数据保留为元组。
words = {0: ("wake up", "aaaa"),
1:("look after", "bbbb"),
2:("turn on", "cccc")
}
# Now, the following line should work fine
k, v = words[random.randint(0, 2)]
如果对外部数据结构没有限制,那么使用list或tuple如下:
words = (
("wake up", "aaaa"),
("look after", "bbbb"),
("turn on", "cccc")
)
# Now, the random.choice can be used
k, v = random.choice(words)