繁体   English   中英

在 python 中将列表转换为字典

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM