2024-04-25 06:12:35 发布
网友
我试着把两本字典加起来:
my_new_dict = dict(my_existing_dict.items() + my_new_dict.items())
但收到错误
TypeError: unsupported operand type(s) for +: 'dict_items' and 'dict_items'
我做错了什么?
由于PEP 448(Python 3.5),我推荐一个非常简单易读的解决方案:
{**d1, **d2}
现在,您可以将解包提供为文字和多个解包,这意味着这是可行的。
一个问题是你想要的行为是模棱两可的-字典不能有重复的键,所以不清楚如果两者都包含相同的键,你想要发生什么。规范明确说明了使用此方法时应执行的操作:
In dictionaries, later values will always override earlier ones
如果您想要相反的行为,您可以简单地交换字典在文本中的顺序。如果要引发异常,可以使用不接受重复参数的dict()方法,即:
dict()
dict(**d1, **d2)
在旧版本的Python 3中,您的方法是有效的,但这里的问题是dictionary views are set-like,因此它们没有实现addition。
您可能需要的是union:d1.items() | d2.items(),它将为您提供一组(key, value)元组。如果随后将其传递给dict()并且存在重复项,“last”值将是所使用的值,但是集合(与视图本身不同)是无序的,因此无法保证组合集合中的哪个项将以“first”结尾,这意味着哪个“wins”将是任意的。
d1.items() | d2.items()
(key, value)
因此,简言之,只要顺序/重复选择不重要:
dict(d1.items() | d2.items())
注意,在Python 2中,dict.items()只返回一个list,您的方法将在这里工作。
dict.items()
list
其他建议答案的另一种方法是:
dict(list(d1.items()) + list(d2.items()))
如果在d1和d2中都存在键,则d2中的值将在最终字典中使用。
d1
d2
在python3中,dict.items()返回一个类型为dict_items的对象,该对象显然无法添加。(在python 2中,它返回了一个可以添加的list)。
dict_items
添加一对适用于py2k和py3k的词典的另一种方法:
d = dict1.copy() d.update(dict2)
当然,在发生密钥冲突的情况下,您希望发生什么是有点模棱两可的。e、 g.如果两个dict都有key1,那么输出中应该保留谁的key1?或者你应该把两者结合起来?在后一种情况下,您可能需要来自collections模块的内容(或者defaultdict,或者Counter)
key1
collections
defaultdict
Counter
由于PEP 448(Python 3.5),我推荐一个非常简单易读的解决方案:
现在,您可以将解包提供为文字和多个解包,这意味着这是可行的。
一个问题是你想要的行为是模棱两可的-字典不能有重复的键,所以不清楚如果两者都包含相同的键,你想要发生什么。规范明确说明了使用此方法时应执行的操作:
如果您想要相反的行为,您可以简单地交换字典在文本中的顺序。如果要引发异常,可以使用不接受重复参数的
dict()
方法,即:在旧版本的Python 3中,您的方法是有效的,但这里的问题是dictionary views are set-like,因此它们没有实现addition。
您可能需要的是union:
d1.items() | d2.items()
,它将为您提供一组(key, value)
元组。如果随后将其传递给dict()
并且存在重复项,“last”值将是所使用的值,但是集合(与视图本身不同)是无序的,因此无法保证组合集合中的哪个项将以“first”结尾,这意味着哪个“wins”将是任意的。因此,简言之,只要顺序/重复选择不重要:
注意,在Python 2中,
dict.items()
只返回一个list
,您的方法将在这里工作。其他建议答案的另一种方法是:
dict(list(d1.items()) + list(d2.items()))
如果在
d1
和d2
中都存在键,则d2
中的值将在最终字典中使用。在python3中,
dict.items()
返回一个类型为dict_items
的对象,该对象显然无法添加。(在python 2中,它返回了一个可以添加的list
)。添加一对适用于py2k和py3k的词典的另一种方法:
当然,在发生密钥冲突的情况下,您希望发生什么是有点模棱两可的。e、 g.如果两个dict都有
key1
,那么输出中应该保留谁的key1
?或者你应该把两者结合起来?在后一种情况下,您可能需要来自collections
模块的内容(或者defaultdict
,或者Counter
)相关问题 更多 >
编程相关推荐