我有一个列表,我需要将其制作成字典。该列表具有重复(即将成为)具有不同值的键。我如何找到这些键并将新值添加到它?如果键已经存在,将值附加到键(python/jython)
list=[q:1,w:2,q:7]
dictionary= q:1,7
w:2
在此先感谢
我有一个列表,我需要将其制作成字典。该列表具有重复(即将成为)具有不同值的键。我如何找到这些键并将新值添加到它?如果键已经存在,将值附加到键(python/jython)
list=[q:1,w:2,q:7]
dictionary= q:1,7
w:2
在此先感谢
请在你的字典列表中的值,让你有:
dictionary = {'q': [1, 7],
'w': [2]
}
等即你的一个项的值是一个项目列表。这意味着,当你有另一'q'
,你可以这样做:
dictionary['q'].append(5)
除dictionary['q']
将是一个KeyError
你第一次做,所以使用setdefault
代替:
dictionary.setdefault('q', []).append(5)
所以,现在你只需需要迭代输入列表中的每个键和值对,并对它们中的每一个进行上述操作。
你可能或者想拥有dictionary
是:
dictionary = collections.defaultdict(list)
所以,你可以做dictionary['q'].append(5)
- 它将工作与上述相同,在各方面的酒吧之一。如果,你已经解析您的原始清单,并正确设置所有的值之后,你的字典是这样的:
dictionary = {'q': [1, 7, 5]
'w': [2, 8, 10, 80]
'x': [3]
}
,并尝试做print(dictionary['y'])
。你期望发生什么?如果您使用正常的字典和setdefault
,这被认为是一个错误,所以它会提高KeyError
。如果您使用defaultdict
,它将打印一个空列表。无论哪种方法对你的代码更有意义都应该决定你编码的方式。
更好的是,使用'collections.defaultdict(list)' - 然后你可以像使用普通字典一样分配或查找。 –
@DavidRobinson在这种情况下'defaultdict'是否优于setdefault是有争议的。当工厂功能昂贵时,他们的主要好处就来了 - 但建立一个空的清单并不是。 – lvc
我认为这对代码紧凑有利。您只需定义一次字典,但可能会在代码中多次获取或设置值。 –
列表通常不具有键值对。你的列表是由元组还是其他?此外,你想以什么方式明确地将值附加到其他值 - 你是否将它们视为字符串?因为你的例子表明他们被视为整数。 –