假设我有这个元组:
k=('a', ['email1', 'email2']), ('b',['email3'])
当我这样做时:
j=dict(k)
它应该根据python文档返回:
{'a': ['email1', 'email2'], 'b': ['email3']}
当元组位于键值对中时,这很容易。但如果相反它只是一个元组呢? (以下示例):
k=('a', ['email1', 'email2'], 'b',['email3'])
我试着这样做:
dict((k,))
但是如果元组中有多个元素,它就不起作用。
修改
dict((k,))
和dict[k]?
之间的区别是什么它们似乎给出相同的输出。答案 0 :(得分:2)
这与How do you split a list into evenly sized chunks in Python?实际上是同一个问题,除非您想将其分组为2。给出:
def chunk(input, size):
return map(None, *([iter(input)] * size))
你会这样做:
k=('a', ['email1', 'email2'], 'b',['email3'])
dict(chunk(k, 2))
<强>输出:强>
{'a': ['email1', 'email2'], 'b': ['email3']}
对于您的其他问题,您使用的是python3吗? dict[k]
可能会__getitem__
,但我不熟悉python3。 dict((k,))
正在击中构造函数。在python2.7中,它们绝对不相同:
>>> dict((k,))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 4; 2 is required
>>> dict[k]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'type' object has no attribute '__getitem__'
答案 1 :(得分:1)
您不能将列表作为字典键。字典键可以是immutable
类型,请参阅https://docs.python.org/2/tutorial/datastructures.html#dictionaries
通过将一个带有列表的元组作为一些键,如示例所示,它将失败。
此外,您的元组示例仅在元组具有两个元素时才起作用,因此一个可以成为键,另一个可以成为值。我用这个例子:
k=('a', ['email1', 'email2']), ('b',['email3']), ('c',['email4'], 'a')
因为最后一个元组有3个项目,所以它会失败。你的第二个例子是一个超过2个元素的元组,因此无法转换。
我觉得您正在尝试将dict
函数扩展到它的意图,如果您想要自定义构建字典,查找dict
函数,查找字典理解或使用for循环添加元素。
http://legacy.python.org/dev/peps/pep-0274/&lt; - dictionary comprehensions
除了简单的元组到字典转换之外,你不太清楚你要做什么。
答案 2 :(得分:1)
您可以执行以下操作:
k=('a', ['email1', 'email2'], 'b',['email3'])
l = [(k[i], k[i+1]) for i in range(0, len(k), 2)]
l = dict(l)
print l
<强>输出:强>
{'a': ['email1', 'email2'], 'b': ['email3']}
答案 3 :(得分:1)
您可以使用dict
对(长度为2个元组)初始化list
,这就是为什么它适用于这种情况:
k=('a', ['email1', 'email2']), ('b',['email3'])
dict(k) # key: a, b
# value: ['email1', 'email2'], ['email3']
dict
的构造函数将每个tuple
中的第一个元素作为键,将第二个元素作为值。
在第二种情况下,您传递的是一个tuple
,其中包含四个元素,dict
没有启发式来区分“关键字”。和&#39;价值&#39;。因此,您需要按照@Kit Sunde的答案来分割您的元组。