Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何生成一个单行生成器表达式来生成这两个不同的列表_Python_Dictionary - Fatal编程技术网

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

Python 如何生成一个单行生成器表达式来生成这两个不同的列表,python,dictionary,Python,Dictionary,我正在写一个程序来解析这样的列表 ['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]) va

我正在写一个程序来解析这样的列表

['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]

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

您可以很容易地理解它:

your_dict = {x.split(':')[0]: x.split(':')[1] for x in data}
您还可以防止使用拆分两次并使用生成器:

your_dict = dict(x.split(':') for x in data)
看起来更干净…

我是这样做的:

self.dic={}
对于数据中的e:
k、 v=e.split(“:”)
自dic[k]=v
l=['ecl:gry','pid:860033327','eyr:2020','hcl:#FFFFF D',',
'byr:1937'、'iyr:2017'、'cid:147'、'hgt:183cm']
dict(e.split(“:”)表示l中的e)

哇,我甚至都没想到会有字典理解,这太神奇了。蟒蛇很漂亮。非常感谢。这是我的第一个想法,但使用
split
两次似乎有点。。。笨拙。你甚至不需要列表:
dict(e.split(“:”)表示l中的e)
答案中的字符更少。谢谢你,没有男人的角色并不意味着它会跑得更快。但是在这种情况下,它会更快,因为
拆分
每个字符串只需执行一次。@Matthias我认为字符数越少,通常意味着它运行得越快。在这种情况下,它不会创建一个临时列表并将生成器直接传递给
dict
,这会使它更快一些。我的评论不是关于这个解决方案。人们常常试图将所有内容塞进尽可能少的行中,因为他们认为更少的代码意味着更快的运行时行为。但在这里,我真的要测量列表和生成器之间的时间差。我见过中间构造一个列表速度更快的例子。我可以试着找一个例子。