![](/img/trans.png)
[英]How do I append a dictionary as another value to an existing dictionary key
[英]How to append a value to a not yet existing key?
我有一本这样的字典:
dct = {'one': 'value',
'two': ['value1','value2','value1'],
'three':['otherValue1','otherValue2','otherValue1'],
'dontCareAboutThisKey':'debug'}
我需要从列表中删除重复的值。 我写了一个函数来做到这一点:
no_dups = {}
for keys in dct:
if isinstance(dct[keys], list) and keys != 'dontCareAboutThisKey':
for value in dct[keys]:
if value not in no_dups.values():
no_dups[keys].append(value)
else:
no_dups[keys] = dct[keys]
我正在检查当前键的值是否为列表。 如果否,则只需将键“复制”到no_dups
字典。 如果它是一个列表而不是我不在乎的键(肯定没有重复项)-它应该检查no_dups.values()
是否已经存在当前值,并将其附加到当前键中。 问题是我遇到错误:
KeyError: 'two:'
我知道这是因为我正在尝试为不存在的键添加一个值,但是我不知道如何处理并使其正常工作。
我认为处理键和同时追加的最好方法是使用dicts的setdefault()
方法:
no_dups.setdefault(keys,[]).append(value)
但是,除此以外,您可以像这样更整洁地执行此操作:
#remove duplicates
no_dups = {k:list(set(v)) if isinstance(v, list) and k != 'dontCareAboutThisKey' else v
for k,v in dct.items()} # or dct.iteritems() if using python2.x
对于通过if
测试的键值组合,该骇客会将列表转换为一组(删除重复项),然后再次在列表中。 对于其他键值组合,它将保持原样。
dct = {'one': 'value',
'two': ['value1','value2','value1'],
'three':['otherValue1','otherValue2','otherValue1'],
'dontCareAboutThisKey':'debug'}
set(dct)
返回一个set
,它是一个没有重复的列表:
for key, value in dct.items():
if not isinstance(value, basestring):
dct[key] = set(value)
如果您需要一本新词典,可以这样做:
new_dct = {}
for key, value in dct.items():
if not isinstance(value, basestring):
new_dct[key] = set(value)
else:
new_dct[key] = value
如果要删除重复项,只需使用set()函数将您的列表设置为set即可:
https://docs.python.org/2/tutorial/datastructures.html#sets
它会自动为您提供唯一的设置,然后您可以随时将其更改回列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.