Python 获取dict键的乘积及其值的简单方法
我有一本用于对文件名和扩展名进行分组的词典:Python 获取dict键的乘积及其值的简单方法,python,dictionary,list-comprehension,product,itertools,Python,Dictionary,List Comprehension,Product,Itertools,我有一本用于对文件名和扩展名进行分组的词典: email_fields = {'txt': ('subject', 'plaintext_body'), 'html': ('html_body',)} 我需要一个元组列表,如下所示: >>> get_my_list(email_fields) [('txt', 'subject'), ('txt', 'plaintext_body'), ('html', 'html_body')] [('t'
email_fields = {'txt': ('subject', 'plaintext_body'),
'html': ('html_body',)}
我需要一个元组列表,如下所示:
>>> get_my_list(email_fields)
[('txt', 'subject'), ('txt', 'plaintext_body'), ('html', 'html_body')]
[('t', 'subject'),
('t', 'plaintext_body'),
('x', 'subject'),
('x', 'plaintext_body'),
('t', 'subject'),
('t', 'plaintext_body')],
('h', 'html_body'),
('t', 'html_body'),
('m', 'html_body'),
('l', 'html_body')]
我想使用itertools
模块中的starmap
、product
和chain
之类的东西来完成:
foo = starmap(product, email_fields.items())
chain.from_iterable(foo)
我遇到的问题是,产品
需要两个iterables,由于电子邮件字段
的键是字符串,我得到了如下结果:
>>> get_my_list(email_fields)
[('txt', 'subject'), ('txt', 'plaintext_body'), ('html', 'html_body')]
[('t', 'subject'),
('t', 'plaintext_body'),
('x', 'subject'),
('x', 'plaintext_body'),
('t', 'subject'),
('t', 'plaintext_body')],
('h', 'html_body'),
('t', 'html_body'),
('m', 'html_body'),
('l', 'html_body')]
有更好的方法吗?最接近我的作品,但看起来更丑:
foo = [product([ext], field) for ext, field in email_fields.items()]
chain.from_iterable(foo)
您可以在不使用
产品
本身的情况下完成,只需迭代字典,然后迭代每个值,如下所示
print [(k, item) for k in email_fields for item in email_fields[k]]
# [('txt', 'subject'), ('txt', 'plaintext_body'), ('html', 'html_body')]
您可以在不使用
产品
本身的情况下完成,只需迭代字典,然后迭代每个值,如下所示
print [(k, item) for k in email_fields for item in email_fields[k]]
# [('txt', 'subject'), ('txt', 'plaintext_body'), ('html', 'html_body')]
我会这样做,手动迭代键,然后迭代每个键的值:
[(k, v) for k in email_fields for v in email_fields[k]]
输出:
[('txt', 'subject'), ('txt', 'plaintext_body'), ('html', 'html_body')]
无需
itertools
此处: 我会这样做,手动迭代键,然后迭代每个键的值:
[(k, v) for k in email_fields for v in email_fields[k]]
输出:
[('txt', 'subject'), ('txt', 'plaintext_body'), ('html', 'html_body')]
无需
itertools
此处: 但是我想要回我的itertools
)我认为,如果在第二个键ie html中删除逗号,第二个循环将产生错误的结果_body@hso哈哈,我一点也不知道我在用itertools
做什么。如果我的回答对你有帮助,你介意在宽限期过后接受吗?你可以点击选票计数下面的勾号,使其变为绿色。谢谢你。@AlexThornton没问题,我只是在开玩笑。我只是在玩弄itertools
,觉得“星图产品链”听起来有点棒:Pitertools
是一个很棒的库,我一直在尝试自己学习。:)但是我想要回我的itertools
)我认为,如果在第二个键ie html中删除逗号,第二个循环将产生错误的结果_body@hso哈哈,我一点也不知道我在用itertools
做什么。如果我的回答对你有帮助,你介意在宽限期过后接受吗?你可以点击选票计数下面的勾号,使其变为绿色。谢谢你。@AlexThornton没问题,我只是在开玩笑。我只是在玩弄itertools
,觉得“星图产品链”听起来有点棒:Pitertools
是一个很棒的库,我一直在尝试自己学习。:)我想这是主观的…:)我认为你的解决方案很好,我想这是主观的…:)我认为你的解决方案已经足够好了