在Python字典中添加缺失的值



我目前有一个以数字索引作为键的字典。我知道字典中应该有多少值,并且想要添加字典中缺少的键和一个空值。为了说明这一点,我包含了这个例子:

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

我知道我的字典里有8个值,所以我想写一个函数把上面的字典变成:

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}

参见pythondict合并问题

可以这样做:

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

否则,如果您知道您的值彼此紧跟着,则可以使用以下函数:

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_at转到stops_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)

或者,您可以创建一个新字典,而不是使用相同的字典并按键排序,它将自动排序,因为您是按顺序添加它们的。

如果您使用键作为字符串(如在您的示例中)。如果它们是整型的,就不用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中。

上面的例子可以很好地填充none,但是您应该考虑,也许在从字典中检索值的地方,使用dictionary.get(key, None)而不是dictionary[key]。这样,对于不存在的键,您将获得None,并拥有原始字典。

相关内容

  • 没有找到相关文章

最新更新