我想要下面的代码实现的是,对于具有较小临时密钥值的字典,在该字典中添加一个带有“永久”键的值,并且该值与临时密钥的值相同。
Variable="a"
a_list={'a': {'c': '2', 'b': '1'}, 'c': {'a': '2', 'b': '3'}, 'b': {'a': '1', 'c': '3'}}
a_list[Variable]["permanent"]="1"
for item in a_list[Variable].keys():
try:
if a_list[Variable][item]!=0:
a_list[item]["temporary"]=a_list[Variable][item]
except KeyError:
pass
for item in a_list.keys():
if "permanent" in a_list[item].keys():
del a_list[item]
print a_list
现在的输出是
{'c': {'a': '2', 'b': '3', 'temporary': '2'}, 'b': {'a': '1', 'c': '3', 'temporary': '1'}}
但是在添加声明之后我希望输出为
{'c': {'a': '2', 'b': '3', 'temporary': '2'}, 'b': {'a': '1', 'c': '3', 'temporary': '1', 'permanent': '1'}}
我不知道如何通过比较两个词典中的两个临时键来实现这一点。 非常感谢任何帮助!
答案 0 :(得分:1)
min
函数将遍历列表。如果给定一个特殊的key=
命名参数,它将使用作为key=
函数传入的单参数函数来提取用于比较目的的值。
您只使用包含数字的字符串来显示字典。因此,最大字符串是'A'(比数字晚一些)。所以:
max_value = 'A'
min_temp = min(a_list.keys(), key= lambda k: a_list[k].get('temporary', max_value))
此时,min_temp
的{{1}}中的第一个键具有sub-dict键'temporary'的最低值,或者如果没有该子键,则a_list
返回keys()
的第一个键。 1}}(默认值为max_value
)。所以让我们仔细检查它是否是一个有效的匹配:
if 'temporary' in a_list[min_temp]:
a_list[min_temp]['permanent'] = a_list[min_temp]['permanent']