检查字典键是否存在列表元素,创建值列表(如果存在),否则为"无"



原谅这个复杂的标题,但我找不到更优雅的方式来表达这个问题。我能找到的壁橱问题可以在这里找到,但它并不能完全让我到达那里。

假设有许多不同长度的字典:

dict_1 = {'A':4, 'C':5}
dict_2 = {'A':1, 'B':2, 'C':3}
dict_3 = {'B':6}

这些词典的共同点是它们都共享此列表中的键:

my_keys= ['A','B','C']

但有些缺少一个或多个密钥。

目的是创建一个列表列表,其中每个列表元素是每个字典中所有现有值的列表,或者"None"(如果不存在特定键(。它们的键本身在所有字典中都是相同的,可以忽略不计。

因此,在这种情况下,预期的输出是:

final_list = 
[[4,"None",5],
[1,2,3],
["None",6,"None"]]

我不确定如何处理它。您可以从my_keys中的每个元素开始,并对照每个字典中的每个键检查它的存在;如果相关字典具有键,则该键的值将附加到临时列表中;否则,将附加"无"。一旦my_keys全部迭代完毕,临时列表将附加到最终列表,循环将再次开始。

至少对我来说,说起来容易做起来难。我尝试了很多东西(我不会费心发布,因为它们甚至没有接近(。所以我想知道是否有一种优雅的方法来解决这个问题。

dict.get可以返回默认值(例如,None(。如果我们以你为例:

dict_1 = {'A':4, 'C':5}
dict_2 = {'A':1, 'B':2, 'C':3}
dict_3 = {'B':6}
my_keys= ['A','B','C']

然后dict_1.get('B', None)是确保我们获得默认None值的方法。我们可以以相同的方式遍历所有键:

def dict_to_list(d, keys):
return [d.get(key, None) for key in keys]

例:

>>> dict_to_list(dict_1, my_keys)
[4, None, 5]
>>> dict_to_list(dict_2, my_keys)
[1, 2, 3]
>>> dict_to_list(dict_3, my_keys)
[None, 6, None]

编辑:None是默认参数,即使它没有明确指定,所以dict_1.get('B')工作

起来就像dict_1.get('B', None)一样好

相关内容

最新更新