簡體   English   中英

在 Python 字典中添加缺失值

[英]Adding missing values in Python dictionary

我目前有一本以數字索引為鍵的字典。 我知道我應該在字典中總共有多少值,並且想在字典中添加丟失的鍵和一個 null 值以及這些鍵。 為了說明我包括了這個例子:

dictionary = {'0' : '101',
              '1' : '102',
              '2' : '100',
              '4' : '100.5',
              '6' : '103'}

我知道我的字典中有 8 個值,所以我想寫一個 function 將上面的字典變成:

dictionary = {'0' : '101',
              '1' : '102',
              '2' : '100',
              '3' : None,
              '4' : '100.5',
              '5' : None,
              '6' : '103',
              '7' : None}

任何人都知道如何實現這一目標? 提前致謝。

假設N是項目數

{**dictionary, **{k: None for k in range(N + 1) if str(k) not in dictionary.keys()}}

但是,將整數作為dictionary中的鍵可能會更好,這樣您就不必強制轉換為str

編輯感謝 schwobaseggl 評論更好的版本是

{**{str(k): None for k in range(N + 1)}, **dictionary}

python中查看有關dict merge 的問題

以下方法可以解決問題:

m = max(map(int, dictionary))
for i in map(str, range(m)):
    if i not in dictionary: 
        dictionary[i] = None

但這是否有必要值得懷疑,因為您可以輕松地在查找時提供默認值: dictionary.get(key)無論如何都會為丟失的鍵返回None

這樣的事情應該可以解決問題:

dictionary = {'0' : '101', '1' : '102', '2' : '100', '4' : '100.5', '6' : '103'}
key_list = ['0','1','2','3','4','5','6','7']
for k in key_list:
    try:
        dictionary[k]
    except KeyError:
        dictionary[k] = None

否則,如果您知道您的值是相互跟隨的,則可以使用以下 function:

def complete_dict(my_dict, begin_at=0, stops_at=8):
    for key in range(begin_at, stops_at):
        if str(key) not in my_dict.keys():
            my_dict[str(key)] = None
    return my_dict

然后從begin_atstops_at - 1

因此,由於您知道它從 0 開始並達到某個值,因此您可以使用 range 循環遍歷所有項目。 如果它已經存在,就使用相同的值,如果不存在,則添加 None。

d = {'0' : '101', '1' : '102', '2' : '100', '4' : '100.5', '6' : '103'}

for i in range(0, 7):
    d[str(i)] = d.get(str(i), None) 

d = dict(sorted(d.items()))
print(d)

或者,您可以創建新的字典,而不是使用相同的字典並按鍵進行排序,因為您是按順序添加它們,所以它會自動排序。

這是如果您將鍵用作字符串(如您的示例)。 如果他們是 int,就丟掉str(i)並只使用i

你不能只使用if k not in dictionary: dictionary[k] = None嗎? 或者是花哨的dictionary[k] = dictionary.get(k)

如果字典中不存在,您可以填寫None

dictionary = {'0' : '101', '1' : '102', '2' : '100', '4' : '100.5', '6' : '103'}
keys = ['0','1','2','3','4','5','6','7']
for k in keys:
    if k not in dictionary:
        dictionary[k] = None

或者如果你想變得花哨:

dictionary = {'0' : '101', '1' : '102', '2' : '100', '4' : '100.5', '6' : '103'}
keys = ['0','1','2','3','4','5','6','7']
for k in keys:
    dictionary[k] = dictionary.get(k)

dictionary.get(k)將通過鍵kNone返回值,如果該值不在dictinary中。

上面的例子可以很好地填充 Nones,但你應該考慮,也許在你從字典中檢索值的地方,使用dictionary.get(key, None)而不是dictionary[key] 這樣你會得到 None 對於不存在的鍵,並擁有你的原始字典。

暫無
暫無

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

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