我如何制作一个单行生成器表达式来生成这两个不同的列表



我正在编写一个程序,它解析这样的列表。

['ecl:gry', 'pid:860033327', 'eyr:2020', 'hcl:#fffffd', 'byr:1937', 'iyr:2017', 'cid:147', 'hgt:183cm']

我想把这个列表变成我在这里完成的键值对的字典:

keys = []
values = []
for string in data:
pair = string.split(':')
keys.append(pair[0])
values.append(pair[1])
zipped = zip(keys, values)
self.dic = dict(zipped)
print(self.dic)

我知道我可以使用列表理解来一次制作一个列表,就像这个一样

keys = [s.split(':')[0] for s in data]
values = [s.split(':')[1] for s in data]

这需要两个循环,所以第一个代码示例会更好,但有没有一种方法可以使用一个带有解包的生成器生成两个列表,然后将两者压缩在一起?

l = ['ecl:gry', 'pid:860033327', 'eyr:2020', 'hcl:#fffffd',
'byr:1937', 'iyr:2017', 'cid:147', 'hgt:183cm']
dict(e.split(':') for e in l)

我是这样做的:

self.dic = {}
for e in data:
k, v = e.split(':')
self.dic[k] = v

你可以很容易地判断理解:

your_dict = {x.split(':')[0]: x.split(':')[1] for x in data}

您还可以防止使用拆分两次并使用生成器:

your_dict = dict(x.split(':') for x in data)

看起来更干净。。。

最新更新