簡體   English   中英

Python中的dict的元組

[英]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化的方法。

  1. 在不對數據結構進行任何修改的情況下,以下代碼將為您工作:

     k, v = words[random.randint(0, 2)].items()[0] 

    但是,這不是最好的(&pythonic)方法。

  2. 如果您的內部字典始終只有一個鍵/值對,那么實際上就沒有必要將其保留為字典。 而是將內部數據保留為元組。

     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)] 
  3. 並且如果對外部數據結構也沒有限制,則按以下方式使用列表或元組:

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM