0
votes

Une doublure pour créer un dictionnaire de deux listes de python

Je veux créer ce dictionnaire, mais en utilisant une doublure forte>. xxx pré>

C'est ce que j'ai initialement essayé et obtenu l'erreur, bien que {* * {'a': 1}, ** {'B': 2}} code> fonctionne parfaitement et donne {'A': 1, 'B': 2} code>, mais en utilisant Cette formulation dans Compréhension du dictionnaire Code> donne une erreur.:

p> a résolu ceci comme ci-dessous, mais j'aimerais avoir une vitrine -Compéhension code> Solution similaire. Toute suggestion? P>
# 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'}


2 commentaires

Que considérez-vous exactement inélégant à propos de votre solution? Pour moi, la chose la plus inélégante est que la solution est forcée d'être sur une seule ligne;)


Eh bien, j'apprécie votre perspective et ce que vous dites est bien correct.


3 Réponses :


3
votes
import itertools; {f'{goods}_last_{amount}': 'buy' for goods, amount in itertools.product(['apple','mango','banana'], ['kg','3kg','4kg','6kg'])}

4 commentaires

Merci, laissez-moi l'essayer sur des versions inférieures de Python


Vous avez besoin de fonctionnalités python.org/dev/peps/pep-0274 et docs.python.org/2/library/itétools.html#itertools. produit pour que cela fonctionne. Cela signifie que vous avez besoin de python 2.7 ou plus récent.


Pour utiliser F-Strings, python.org/dev/peps/pep-0498, vous avez besoin d'au moins 3,6.


Merci. Je vais en faire une note.



1
votes
dict.fromkeys(
    (i+'_last_'+j for j in ['6kg','4kg','3kg','kg'] for i in ['apple','mango','banana']),
    "buy"
)
See this classmethod here.

0 commentaires

1
votes

Ceci:

{'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'}


0 commentaires