2016-12-02 3 views
0

Ich habe zwei Listen:Wie Tupel von zwei zu einem Wörterbuch hinzufügen?

list1 = ['USD', 'GBP', 'CHF', 'HRK', 'HUF', 'RSD', 'BAM', 'MKD', 'RUB', 'CZK', 'PLN', 'BGN', 'NOK', 'SEK', 'DKK', 'AUD', 'CAD', 'JPY'] 

list2 = [('1,0748', '1,0508'), ('0,8639', '0,8399'), ('1,0942', '1,0602'), ('7,6508', '7,4208'), ('5,8900', '7,0900'), ('4,9400', '1,1400'), ('1,9850', '1,9190'), ('2,1100', '0,2900'), ('1,9393', '6,5393'), ('7,5440', '6,5440'), ('4,5090', '4,3610'), ('1,9790', '1,9250'), ('9,2471', '8,9071'), ('9,9290', '9,6090'), ('7,5521', '7,3281'), ('1,4444', '1,4004'), ('1,4528', '1,4048'), ('1,8300', '8,0300')] 

Wie würde ich ein Wörterbuch zu machen, wo die beiden Artikel Tupel, die die Werte und die Elemente in list1 Schlüssel zu diesen Tupeln sein würde.

Etwas wie folgt aus: {'USD': (1.0748, 1.0508), 'GBP': (0.8639, 0.8399), etc.}.

Der erste Eintrag aus der Liste geht man mit dem ersten Tupels von list2, der zweite mit dem zweiten usw.

Auch, wie Sie sehen können, die „Zahlen“ sind Zeichenfolgen in Liste2, werden jedoch im Wörterbuch zu Gleitkommazahlen. Wie könnte dies auf die einfachste Weise geschehen?

Vielen Dank für Ihre Hilfe.

+1

Crude Art und Weise, es zu tun: 'd = {i: (float (j [0] .replace (',', '.')), Float (j [1] .replace (',', '.'))) Für i, j in zip (list1, list2)} ' –

+1

@ Farhan.K: Wenn das eine Lösung für das OP-Problem sein soll und wir die Frage nicht abschließen, warum ist es ein Kommentar und keine Antwort? – DSM

Antwort

3

Sie sollten zuerst die Werte von String-Transformation mit einem Verständnis schwimmt:

f_list2 = [tuple(map(float, [i.replace(',','.'), j.replace(',','.')])) for (i,j) in list2] 

das geht nur durch jedes Subelement in jedem Tupel Vorkommen von ',' mit '.' und macht sie float s durch die Verwendung von map ersetzt wird; Wickeln Sie das map Ergebnis in eine tuple expandiert es und behält die Elemente in Tupeln, wie sie ursprünglich waren.

und dann zip verwenden, um die Paare an dict zu übergeben. dict akzeptiert auch Tuple-Paare (key, val), die verwendet wird, um key und value entsprechend zu initialisieren. Also:

d = dict(zip(list1, f_list2)) 

Mit d nun mit dem Inhalt:

{'AUD': (1.4444, 1.4004), 
'BAM': (1.985, 1.919), 
'BGN': (1.979, 1.925), 
'CAD': (1.4528, 1.4048), 
'CHF': (1.0942, 1.0602), 
'CZK': (7.544, 6.544), 
'DKK': (7.5521, 7.3281), 
'GBP': (0.8639, 0.8399), 
'HRK': (7.6508, 7.4208), 
'HUF': (5.89, 7.09), 
'JPY': (1.83, 8.03), 
'MKD': (2.11, 0.29), 
'NOK': (9.2471, 8.9071), 
'PLN': (4.509, 4.361), 
'RSD': (4.94, 1.14), 
'RUB': (1.9393, 6.5393), 
'SEK': (9.929, 9.609), 
'USD': (1.0748, 1.0508)} 
+1

Wenn dies die Antwort wäre, sollten wir diese Frage als dup einreichen. Aber die Frage hat auch eine zweite Komponente, die die Umwandlung von Kommas als Dezimalzeichen in Floats beinhaltet. – DSM

+0

Oh, habe diesen Teil nicht bemerkt; Ich werde es aktualisieren. –

0

regex Art und Weise, es zu tun

list1 = ['USD', 'GBP', 'CHF', 'HRK', 'HUF', 'RSD', 'BAM', 'MKD', 'RUB', 'CZK', 'PLN', 'BGN', 'NOK', 'SEK', 'DKK', 'AUD', 'CAD', 'JPY'] 
list2 = [('1,0748', '1,0508'), ('0,8639', '0,8399'), ('1,0942', '1,0602'), ('7,6508', '7,4208'), ('5,8900', '7,0900'), ('4,9400', '1,1400'), ('1,9850', '1,9190'), ('2,1100', '0,2900'), ('1,9393', '6,5393'), ('7,5440', '6,5440'), ('4,5090', '4,3610'), ('1,9790', '1,9250'), ('9,2471', '8,9071'), ('9,9290', '9,6090'), ('7,5521', '7,3281'), ('1,4444', '1,4004'), ('1,4528', '1,4048'), ('1,8300', '8,0300')] 
import re 
d = dict(zip(list1, eval(re.sub("'(\d+),(\d+)'", r'\1.\2', str(list2))))) 
# replace eval with ast.literal_eval if the source of list2 might be dangerous 
Verwandte Themen