gpt4 book ai didi

python - 如何以 Pythonic 方式将此元组列表转换为此字典?

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:37 24 4
gpt4 key购买 nike

我有一个元组列表

tuplist = [('person', u'English : 1, 2, 3 ; Dutch : 5, 6, 7'), ('home', u'English : 8, 9, 10; Dutch: 11, 12, 13')]

我想把它转换成这个特定的字典

{'person': {u'Dutch': [u'5', u'6', u'7'], u'English': [u'1', u'2', u'3']}, 'home': {u'Dutch': [u'11', u'12', u'13'], u'English': [u'8', u'9', u'10']}}

目前我是这样的:

dic = dict(tuplist)
final_dic = {}
for x in dic:
str = dic[x]
list1 = [y.strip() for y in str.split(';')]
subdict = {}
for z in list1:
list2 = [y.strip() for y in z.split(':')]
subdict[list2[0]] = [y.strip() for y in list2[1].split(',')]
final_dic[x] = subdict

但我想将它重写为更 Pythonic 的东西。有人知道吗?

最佳答案

您可以嵌套一组字典和列表推导式:

{k: {l.strip(): [n.strip() for n in nums.split(',')] 
for i in v.split(';')
for l, nums in (i.split(':', 1),)}
for k, v in tuplist}

这是一个满嘴的东西,所以最好把语言字典拆分成一个生成器:

def language_values(line):
for entry in line.split(';'):
lang, nums = entry.split(':', 1)
yield lang.strip(), [n.strip() for n in nums.split(',')]

{k: dict(language_values(v)) for k, v in tuplist}

任何一个都会产生所需的输出:

>>> {k: {l.strip(): [n.strip() for n in nums.split(',')] 
... for i in v.split(';')
... for l, nums in (i.split(':', 1),)}
... for k, v in tuplist}
{'person': {u'Dutch': [u'5', u'6', u'7'], u'English': [u'1', u'2', u'3']}, 'home': {u'Dutch': [u'11', u'12', u'13'], u'English': [u'8', u'9', u'10']}}
>>> def language_values(line):
... for entry in line.split(';'):
... lang, nums = entry.split(':', 1)
... yield lang.strip(), [n.strip() for n in nums.split(',')]
...
>>> {k: dict(language_values(v)) for k, v in tuplist}
{'person': {u'Dutch': [u'5', u'6', u'7'], u'English': [u'1', u'2', u'3']}, 'home': {u'Dutch': [u'11', u'12', u'13'], u'English': [u'8', u'9', u'10']}}

关于python - 如何以 Pythonic 方式将此元组列表转换为此字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21265376/

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