如何在不覆盖的情况下将新值附加到现有的dict键

时间:2014-04-04 11:42:19

标签: python dictionary hash

标题描述了问题,这是我尝试过的,这不是给我预期的重新安排..问题出在哪里?

for name in file:              
  if name in list:
    if dict.has_key(param):
      dict[param] = [dict[param],name]
    else:
      dict[param] = name

期待输出:

dict = {
'param1': ['name11', 'name12', 'name13'],
'param2': ['name21', 'name22', 'name23'],
.
.
.
}

2 个答案:

答案 0 :(得分:3)

您需要将这些名称附加到列表中。以下是一个简单的例子,可能会破坏。

for name in file:              
    if name in list:
        if dict.has_key(param):
            dict[param].append(name)
        else:
            dict[param] = [name]

或者如果你想变得更干净,可以使用collections.defaultdict。如果你问我,这就是pythonic方式。

d = collections.defaultdict(list)
for name in file:
    if name in lst: # previously overwrote list()
        d[param].append(name)

不要使用您自己的变量覆盖内置dict()list()函数。

答案 1 :(得分:0)

您正在寻找一张多地图,即一张没有钥匙的地图或字典 - >价值关系但关键 - >许多价值观,见:

请参阅Is there a 'multimap' implementation in Python?