簡體   English   中英

如何使用列表中的鍵和 Python 中的空值初始化字典?

[英]How to initialize a dict with keys from a list and empty value in Python?

我想從中得到:

keys = [1,2,3]

對此:

{1: None, 2: None, 3: None}

有沒有一種蟒蛇式的方式來做到這一點?

這是一種丑陋的方法:

>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}

dict.fromkeys([1, 2, 3, 4])

這實際上是一個類方法,因此它也適用於 dict 子類(如collections.defaultdict )。 可選的第二個參數指定用於鍵的值(默認為None 。)

沒有人願意給出一個 dict-comprehension 解決方案嗎?

>>> keys = [1,2,3,5,6,7]
>>> {key: None for key in keys}
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None}
dict.fromkeys(keys, None)
>>> keyDict = {"a","b","c","d"}

>>> dict([(key, []) for key in keyDict])

輸出:

{'a': [], 'c': [], 'b': [], 'd': []}
d = {}
for i in keys:
    d[i] = None

在要附加任意鍵默認/初始值許多工作流程,你不需要散列每個鍵單獨的時間提前。 您可以使用collections.defaultdict 例如:

from collections import defaultdict

d = defaultdict(lambda: None)

print(d[1])  # None
print(d[2])  # None
print(d[3])  # None

這更有效,它無需在實例化時散列所有密鑰。 此外, defaultdictdict的子類,因此通常不需要轉換回常規字典。

對於需要對允許的鍵進行控制的工作流,您可以根據接受的答案使用dict.fromkeys

d = dict.fromkeys([1, 2, 3, 4])

僅僅因為dict構造函數與zip很好地協同工作很有趣,您可以將默認值和zip repeat到鍵中:

from itertools import repeat

keys = [1, 2, 3]
default_value = None

d = dict(zip(keys, repeat(default_value)))
print(d)

會給:

{1: None, 2: None, 3: None}

repeat創建傳遞給它的元素的無限迭代器,但zip在最短的迭代器上停止,一切正常。

我想從中得到:

keys = [1,2,3]

對此:

{1: None, 2: None, 3: None}

有pythonic的方法嗎?

這是一個丑陋的方法:

>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}

我想從中得到:

keys = [1,2,3]

對此:

{1: None, 2: None, 3: None}

有pythonic的方法嗎?

這是一個丑陋的方法:

>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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