【发布时间】:2017-05-11 04:11:54
【问题描述】:
在 python 中,我正在寻找一种在从包含重复键的文件中加载静态声明的字典时接收警告或错误的方法,对于我的用例,该文件来自用户输入,所以我想确保字典我接收没有重复的密钥。我知道在加载字典 1 与字典 2 相同并且 python 字典保留最右边的键/值对之后。我正在寻找的是一种在加载之前或加载期间获取警告或错误的方法,这表明 dictionary1 有多个重复的“a”键。
dictionary1 = {"a":1, "a":2, "a":3}
dictionary2 = {"a":3}
我能想到的最好办法是使用字典列表,然后将每个字典添加到最终字典中,如下例所示。这可行,但字典列表不像标准字典那样用户友好。
listofDicts = [{"a":1},{"a":2},{"a":3}]
masterDict = {}
for entry in listofDict:
for subDict in entry:
if subDict in masterDict.keys():
print ("ERROR key \"%s\" already exists with value %d" % (subDict, masterDict[subDict]))
else:
masterDict.update({subDict:entry[subDict]})
【问题讨论】:
-
你的文件格式是什么?
-
顺便说一句,
if subDict in masterDict.keys():是一种反模式。您正在创建masterDict中所有键的list,然后对该列表进行成员资格测试,这是一个 O(N) 操作,但如果您刚刚完成if subDict in masterDict,您将有 O( 1) 字典键成员资格测试。 -
使用
json.loads解析您的文件,然后参考此处发布的答案:stackoverflow.com/questions/14902299/… -
文件格式只是一个静态声明的.py文件,其中包含字典的定义。用户可能会多次错误地使用同一个字典键,因此我想在将其加载到处理输入文件的程序中时发现错误。我尝试使用 json.loads 但对于我收到的问题中的简单字典,例如
dictionary1TypeError: expected string or buffer -
所以对于 json 我需要整个字典在一个我想避免的字符串中,有没有办法在检查重复键的同时将字典编码为 json?
标签: python python-2.7 dictionary