我有一个格式为(key, value)
的元组序列itemList
,我想将该列表中的项转换为dict
,格式为{key : [value, ..], ..}
。一个特定的key
值可能会在itemList
中出现多次,并有一个匹配的或新的value
,我还想记录这些值(这就是为什么简单地使用dict(itemList)
不起作用的原因)。在
我正在使用Python2.7.9
并寻找使代码小型化的方法:
newDict = dict()
for k,v in itemList: # itemList contains the tuples described above.
if k in newDict:
newDict[k].append(v)
else:
newDict[k] = [v]
我尝试过将map()
和list-comprehensions
与newDict.update(..)
结合使用,但是没有一个能达到预期效果。在
我已经看过this similar question,,但是我的输入和期望的输出的格式有很大的不同。在
(对于那些想知道的人,“为什么要更改这个完全可以接受的代码?”:我感兴趣的是寻找其他方法来应用Python的内置组件和模块,而不是有意地避免一些功能性和可理解的东西。)
这一行代码可以替换发布的代码,但是读起来相当困难。它可能也不是很快,因为它必须迭代
itemList
多次。在newDict = dict((k, [_v for _k,_v in itemList if _k == k]) for k in set(i[0] for i in itemList))
您可以使用^{} 来缩短代码,如下所示
setdefault
将在字典中查找键,如果找不到它,它将为它分配第二个参数并返回它。在如果在字典中找到了键,它将简单地返回相应的值。在
或者,可以使用^{} ,如下所示
^{pr2}$这与
setdefault
方法类似。如果在字典中找不到键,则将调用传递给defaultdict
构造函数的函数来创建新值。在相关问题 更多 >
编程相关推荐