[英]Tuple from dict of dict in Python
我在python中有一個字典,用於從字典中獲取隨機值
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
為什么我需要另一個值?
您正在訪問的字典,一個密鑰, 只返回值:
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
字典。
簡介:方法3是最Python化的方法。
在不對數據結構進行任何修改的情況下,以下代碼將為您工作:
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)]
並且如果對外部數據結構也沒有限制,則按以下方式使用列表或元組:
words = ( ("wake up", "aaaa"), ("look after", "bbbb"), ("turn on", "cccc") ) # Now, the random.choice can be used k, v = random.choice(words)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.