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
,觉得“星图产品链”听起来有点棒:P
itertools
是一个很棒的库,我一直在尝试自己学习。:)但是我想要回我的
itertools
)我认为,如果在第二个键ie html中删除逗号,第二个循环将产生错误的结果_body@hso哈哈,我一点也不知道我在用
itertools
做什么。如果我的回答对你有帮助,你介意在宽限期过后接受吗?你可以点击选票计数下面的勾号,使其变为绿色。谢谢你。@AlexThornton没问题,我只是在开玩笑。我只是在玩弄
itertools
,觉得“星图产品链”听起来有点棒:P
itertools
是一个很棒的库,我一直在尝试自己学习。:)我想这是主观的…:)我认为你的解决方案很好,我想这是主观的…:)我认为你的解决方案已经足够好了