2017-10-03 1 views
1
stu_dict = {raw_input():[float(raw_input()),float(raw_input()),float(raw_input())] for i in xrange(int(raw_input()))} 
print stu_dict 

Pour le code ci-dessus, Fox est la clé, les trois valeurs sont mémorisées dans une liste (valeur)Comment faire pour convertir le code ci-dessous pour accepter l'entrée dans une ligne?

i/p: fox

o/p : 
{'fox': [3.0, 4.0, 5.0]} 

Comment changer le code ci-dessus, pour accepter le renard 3 4 5 en une ligne?

Note: Toute la solution donnée jusqu'à présent, je suis conscient de ceux-ci, Ce que je voulais était en prenant le renard 3 4 5 (sur la même ligne) directement de l'entrée (sans stocker dans la chaîne) paire de dictionnaire (la valeur ici est une liste avec 3 valeurs).

+0

Cette liste contient-elle toujours 3 valeurs? Et quelle est la première ligne d'entrée spécifie (1 dans votre exemple)? –

+0

Oui, 3 valeurs toujours, 1 signifie, je donne 1 ensemble d'entrée (comme la clé et la valeur), @ DineshSuthar – Nexus

Répondre

0

Prenez votre entrée en tant que chaîne et split(" ") et map() ou bouclez-le. Vérifiez l'exemple ci-dessous.

Dans l'exemple ci-dessous vous pouvez plus de trois nombre suivi de "fox" ou de tout autre chose.

Exemple:

stra = "fox 3 4 5" 
dicta = {stra.split(" ")[0]:list(map(float, stra.split(" ")[1:]))} 

print dicta # {'fox': [3.0, 4.0, 5.0]} 
+0

Je ne veux pas stocker l'entrée dans la chaîne, je ne peux pas séparer directement par raw_input(), split()? – Nexus

+0

Oui @Nexus vous pouvez faire cela juste itérer sur votre entrée. – bhansa

0

Vous pouvez utiliser la méthode split() de chaînes pour diviser la chaîne d'entrée: '3 4 5' à une liste de chaînes ['3','4','5']. Et utilisez la fonction float() pour les convertir en valeurs entières. -

>>> stu_dict = {raw_input():[float(x) for x in raw_input().split()] for _ in raw_input()} 
1 
3 4 5 
fox 
>>> stu_dict 
{'fox': [3.0, 4.0, 5.0]} 
+0

vous pouvez également utiliser ['map'] (http://book.pythontips.com/en/latest/map_filter.html) au lieu de boucler. – bhansa

1

Si les valeurs de la liste sont fournis dans une seule ligne, utilisez this-

>>>stu_dict = {raw_input(): map(float,raw_input().split()) for _ in raw_input()} 
1 
3 4 5 
fox 
>>>stu_dict 
{'fox': [3.0, 4.0, 5.0]} 

Et si vous fournissez l'entrée comme décrit en question, utilisez ce -

>>> stu_dict = {raw_input(): [float(raw_input()) for i in xrange(3)] for _ in raw_input()} 
1 
3 
4 
5 
fox 
>>> stu_dict 
{'fox': [3.0, 4.0, 5.0]} 
+0

Je pense que cette solution fonctionne parfaitement. – bhansa

+0

@bhansa: Non, mon format d'entrée est fox 3 4 5 (Chaîne avec clé et liste de valeurs), pas d'autre donnée ici. – Nexus

+0

Donnez-vous votre contribution comme ce 'fox 3 4 5' ligne par ligne, alors vous devez mettre à jour votre question. Cela ne l'indique pas. – bhansa

0

Vous pouvez le faire:

l = input('Enter stuff: ').split() 
stu_dict = {l[0]: [float(i) for i in l[1:]]} 

{'fox': [3.0, 4.0, 5.0]} 

Assurez-vous simplement de l'entrer en format de chaîne:

'fox 3 4 5'