Oneliner使用Python中的两个列表创建字典

问题描述 投票:0回答:3

我想创建此字典,但使用一根衬纸

{'apple_last_6kg':'buy','mango_last_6kg':'buy','banana_last_6kg':'buy',
 'apple_last_4kg':'buy','mango_last_4kg':'buy','banana_last_4kg':'buy',
 'apple_last_3kg':'buy','mango_last_3kg':'buy','banana_last_3kg':'buy',
 'apple_last_kg':'buy','mango_last_kg':'buy','banana_last_kg':'buy'}

这是我最初尝试并得到的错误,尽管{**{'a':1},**{'b':2}}可以完美工作并给出{'a':1,'b':2},但是在dictionary comprehension中使用此公式给出了错误。:

dic2 = {**{i+'_last_'+time:'buy' for i in ['apple','mango','banana']} for time in ['kg','3kg','4kg','6kg']}
print(dic2)
File "<ipython-input-238-9332e6a46412>", line 29
    dic2 = {**{i+'_last_'+time:'buy' for i in ['apple','mango','banana']} for time in ['kg','3kg','4kg','6kg']}
          ^
SyntaxError: dict unpacking cannot be used in dict comprehension

我按照下面的方法解决了这个问题,但是我希望有一个像dictionay-comprehension这样的衬管解决方案。有什么建议吗?

# This solution is unelegant, so I don't want to use this.
dic2 = [{i+'_last_'+j:'buy' for i in ['apple','mango','banana']} for j in ['kg','3kg','4kg','6kg']]

new_dic = {}
for d in dic2:
    new_dic.update(d)
print(new_dic)
{'apple_last_3kg': 'buy','apple_last_4kg': 'buy','apple_last_6kg': 'buy',
 'apple_last_kg': 'buy','banana_last_3kg': 'buy','banana_last_4kg': 'buy',
 'banana_last_6kg': 'buy','banana_last_kg': 'buy','mango_last_3kg': 'buy',
 'mango_last_4kg': 'buy','mango_last_6kg': 'buy','mango_last_kg': 'buy'}
python dictionary-comprehension
3个回答
1
投票
import itertools; {'{}_last_{}'.format(goods, amount): 'buy' for goods, amount in itertools.product(['apple','mango','banana'], ['kg','3kg','4kg','6kg'])}

1
投票
dict.fromkeys(
(i+'_last_'+j for j in ['6kg','4kg','3kg','kg'] for i in ['apple','mango','banana']),
"buy"
)

0
投票

此:

dic2 = [{i+'_last_'+j:'buy' for i in ['apple','mango','banana']} for j in ['kg','3kg','4kg','6kg']]

可以通过以下方式重新制作以产生所需的字典:

newdic = {i+'_last_'+j:'buy' for i in ['apple','mango','banana'] for j in ['kg','3kg','4kg','6kg']}
print(newdic)

提供输出:

{'apple_last_kg': 'buy', 'apple_last_3kg': 'buy', 'apple_last_4kg': 'buy', 'apple_last_6kg': 'buy', 'mango_last_kg': 'buy', 'mango_last_3kg': 'buy', 'mango_last_4kg': 'buy', 'mango_last_6kg': 'buy', 'banana_last_kg': 'buy', 'banana_last_3kg': 'buy', 'banana_last_4kg': 'buy', 'banana_last_6kg': 'buy'}
© www.soinside.com 2019 - 2024. All rights reserved.