我想要合并它们有两个词典,我的意思是选择我感兴趣的那些键,例如我对除了郡以外的所有键感兴趣。我在创建新词典后使用del
函数的解决方案,但我确信有更多方法可以提高我的解决方案效率。如何使用 UNPACKING ARGUMENT 在没有del功能的情况下解决此问题。
>>> d1 = {'avgUserperDay': '12', 'avgPurchaseperDay': '1', 'country': 'Japan'}
>>> d2 = {'tUser': 1, 'tPurchase': 0, 'country': 'Japan'}
>>> d ={**d1,**d2}
>>>{'tUser': 1, 'tPurchase': 0, 'avgPurchaseperDay': '1', 'avgUserperDay': '12', 'country': 'Japan'}
>>> del d['country']
>>> d
{'tUser': 1, 'tPurchase': 0, 'avgPurchaseperDay': '1', 'avgUserperDay': '12'}
讨论后,
此命令适用于3.5.1,
>>> {**{k:v for k, v in chain(d1.items(), d2.items()) if k != 'country'}}
{'tUser': 1, 'tPurchase': 0, 'avgPurchaseperDay': '1', 'avgUserperDay': '12'}
答案 0 :(得分:1)
为什么要使用参数解包来做? 只是做:
from itertools import chain
d = {key:value for key, value in chain(d1.iteritems(), d2.iteritems())
if key not in keys_to_ignore}
其中keys_to_ignore是您要忽略的键的列表/设置/元组
答案 1 :(得分:1)
如果没有使用UNPACKING ARGUMENT的del函数,我该如何解决这个问题?
是的,你可以。但你不应该。理想的方式应该是:
d1.update(d2) # values will be updated in d1 dict
del d1['country']
没有直接的方法来满足你的条件:
dict
del
删除国家/地区。但如果这是你想要的,那么就可以解决这个问题。例如,将itertools.chain()
与 dict comprehension 一起使用为
{**{k:v for k, v in chain(d1.items(), d2.items()) if k != 'country'}}
注意:关于{**dict1, **dict2}
如何运作的好奇心。它是从PEP 448中提出的python 3.5+以来支持的新语法。检查:What's New in Python 3.5文档。
因为 {**dict1, **dict2}
仅在Python 3.5 + 中受支持,对于早期版本的Python,您可以这样做(如S. De Melo所述):
d = dict(d1, **d2)
d.pop("country")
或不使用**
作为:
{k, v for k, v in chain(d1.iteritems(), d2.iteritems()) if k != 'country'}
答案 2 :(得分:1)
如果您不想使用del
,可以将其替换为.pop(key)
。
例如,也使用解包参数:
d = dict(d1, **d2)
d.pop("country")
请注意,.pop
也会返回该值(此处为“Japan”)。