[英]Converting a list to a dictionary in python
我在 Python 中有一个列表,我想将其转换为字典。 名单是:
l = [('1:', [362.5815, 162.5823]), ('2:', [154.1328, 354.133]), ('3:', [168.9325, 368.9331]), ('4:', [9.9201, 209.9206]), ('5:', [106.4842, 306.4844])]
dict 应该将整数 1,2,3,4,5 作为键,将列表作为值。 我试过使用
def Convert(l):
it = iter(l)
res_dct = dict(zip(it, it))
return res_dct
和
def Convert(l):
res_dct = {l[i]: l[i + 1] for i in range(0, len(l), 2)}
return res_dct
但是由于 list 是不可散列的类型,因此这些不起作用。 我还能如何转换此列表? 提前致谢
d = dict()
for (k, v) in l:
d[k.strip(':')] = v
请注意列表中的重复键,因为只会保留最后一个列表,如果您希望重复键,您需要决定以不同方式处理它们的策略(例如合并它们或保留第一个分配而不是最后一个分配作为实现这里)
编辑在下面注释掉键的dict理解和int转换,这也可以完成(虽然不太确定易读性)
{int(key.strip(':')):value for (key,value) in l}
def Convert(l):
res_dct = {l[i]: l[i + 1] for i in range(0, len(l), 2)}
return res_dct
这几乎是正确的。 问题是l[i]
是一个完整的元组作为键。 相反,您需要该元组的第一个元素: l[i][0]
。 同样,该值需要为l[i][1]
才能获取每个元组的第二个元素。 考虑到这一点,没有理由跳过列表中的所有其他元素。 把它们放在一起:
def Convert(l):
res_dct = {l[i][0]: l[i][1] for i in range(len(l))}
return res_dct
一种更 Pythonic 的方法是直接迭代列表的元素,而不是使用列表上的索引:
def Convert(l):
res_dct = {i[0]: i[1] for i in l}
return res_dct
您还可以使用更多的 python 语法来摆脱对元组的索引:
def Convert(l):
res_dct = {k: v for k, v in l}
return res_dct
但是dict()
class 已经使用对列表执行此操作,因此我们可以进一步简化:
def Convert(l):
res_dct = dict(l)
return res_dct
所有这三种变体都会将元组列表变成字典。 但是,他们将完全按原样使用元素。 特别是,密钥将是一个带有数字的字符串,然后是一个冒号。 如果要将它们的键修改为整数,则不能使用调用dict()
的最终版本。 相反,我们将使用字典推导并将一些函数应用于键:
def Convert(l):
res_dct = {int(k.strip(':')): v for k, v in l}
return res_dct
毕竟,我会考虑只列出一个列表。 当键按顺序排列时,列表比字典更有意义:
def Convert(l):
res = [v for k, v in l]
return res
密钥由列表为您处理。 这假设原始元素已经有序。
您可以使用字典理解和枚举
{i: v[1] for i,v in enumerate(l, 1)}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.