gpt4 book ai didi

python - 将列表解压为字符串,将它们拆分并从那里创建字典

转载 作者:行者123 更新时间:2023-12-01 09:09:25 24 4
gpt4 key购买 nike

我正在使用 python 3.x,我想从列表创建一个字典。也就是说,我将每个键和值连接在一个字符串中,并将每个条目作为列表中的一个元素。

my_list = ['val1 key1', 'val2 key2', 'val2 key2']

我可以使用将其分成两个列表

values,keys = zip(*(s.split() for s in my_list))

从那里创建字典很容易。由于我仍然需要对键和值进行处理,所以我这样做:

my_dict = {k[:-1]:float(v) for k,v in zip(keys,values)}

出于好奇,我想知道是否有办法避免中间列表。简而言之,我需要访问每个列表元素,拆分字符串,对每个拆分部分执行某些操作,并将其作为键:值对输入到字典中。正在关注this我尝试过的问题

my_dict = {k[:-1]:float(v) for v,k in zip(*(s.split() for s in my_list))}

但是我收到ValueError:太多值无法解压(预期为2)。然后我尝试在字典理解语法中简单地使用生成器(我认为它是一个生成器)并且它起作用了。但我不喜欢它,因为第二个 for 仅用于从列表中提取元素:

my_dict = {s[1][:-1]:float(s[0]) for s in (s.split(', ') for s in my_list)}

这是我目前正在使用的并且工作完美,但我想知道为什么第二个解决方案不起作用。对我来说,似乎应该如此,而且我的解决方案使用一对多for。我知道这不是一个非常相关的问题,但我想学习。另外,我愿意接受标题建议。

EDIT1:修复了我遇到的一些语法错误。

EDIT2:按照建议,具有预期结果的完整工作且明确的示例。我仍在努力做好mcve的:

my_list = ['1.123, name1\n', '2.3234, name2\n', '3.983, name3\n', '4.23, name4\n']

我想要的输出就是我手动执行时会得到的输出

my_dict = {'name1':1.123, 'name2':2.3234, 'name3':3.983, 'name4':4.23}

创建中间列表的方法:

values,keys = zip(*(s.split(', ') for s in my_list))
print(values)
>>> ('1.123', '2.3234', '3.983', '4.23')
print(keys)
>>> ('name1\n', 'name2\n', 'name3\n', 'name4\n')
my_dict = {k[:-1]:float(v) for k,v in zip(keys,values)}
print(my_dict)
>>> {'name4': 4.23, 'name2': 2.3234, 'name1': 1.123, 'name3': 3.983}

我不知道为什么它不起作用的示例:

my_dict = {k[:-1]:float(v) for v,k in zip(*(s.split(', ') for s in my_list))}
>>> ValueError: too many values to unpack (expected 2)

对我来说,它似乎在列表/字典理解/生成器表达式中使用了一个 to for :

my_dict = {s[1][:-1]:float(s[0]) for s in (s.split(', ') for s in my_list)}
print(my_dict)
>>> {'name4': 4.23, 'name2': 2.3234, 'name1': 1.123, 'name3': 3.983}

我的实际字符串类似于 '0.9493432915614861, zf_AB012_bn_BOS\n'
,这就是我使用更具可读性的示例的原因。

EDIT3:我刚刚了解了 str.strip() 方法。这使得创建字典的行变得更好一点:

my_dict = {s[1].strip():float(s[0]) for s in (s.split(', ') for s in my_list)}

最佳答案

def dict_unzip(lst):
for x in lst:
yield reversed(x.split(' ', 1))

my_dict = dict(dict_unzip(my_list))

但由于它是 Python3,事情实际上要简单得多:

my_dict = dict(map(lambda s: reversed(s.split(' ', 1)), my_list))

甚至

my_dict = dict(reversed(s.split(' ', 1)) for s in my_list)

关于python - 将列表解压为字符串,将它们拆分并从那里创建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51788990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com