以下代码片段有什么区别?因为在最后三种情况下,set union之后的结果是相同的。
>>> s=set("Hacker")
>>> s
{'k', 'a', 'e', 'H', 'r', 'c'}
>>> s.union("Rank")
{'c', 'R', 'k', 'n', 'r', 'a', 'e', 'H'}
>>> s.union({"Rank":1})
{'c', 'Rank', 'k', 'r', 'a', 'e', 'H'}
>>> s.union({"Rank":2})
{'c', 'Rank', 'k', 'r', 'a', 'e', 'H'}
>>> s.union({"Rank":3})
{'c', 'Rank', 'k', 'r', 'a', 'e', 'H'}
答案 0 :(得分:1)
当你将一个对象传递给set.union
时,它会被迭代。
字典会在迭代时生成键,因此会忽略这些值。唯一的关键是"Rank"
。
一个字符串在迭代时产生字符(作为长度为1的字符串)。传递像"Rank"
这样的字符串会将R,a,n和k作为1个字符长的字符串。
如果你想在输入中输入字典并仍然获得字符,只需使用双重理解:
s.union(c for x in {"Rank":2} for c in x)
答案 1 :(得分:0)
set.union()
将一个iterable作为参数,并返回一个新集合,其中包含初始集合和迭代中元素的并集。
因此,如果您将dictionnary作为参数传递,它将遍历dictionnary,它实际上遍历键。因此,在实践中,您的所有s.union({"Rank": x})
都会返回相同的值。