2016-09-23 3 views
-1

Ich habe eine Tabelle, die ich als Python-Code schreiben möchte, aber ich bin stecken und kann nicht herausfinden, wie es geht.Eine Tabelle mit Werten für mehrere Jahre als Wörterbuch schreiben?

Ich habe eine Tabelle mit Daten für zwei Jahre (1991 und 1992) und unterschiedliche Werte für jedes Jahr (Männer: 35 (1991) und 42 (1992), Frauen: 38 (1991), 39 (1992) und Kinder: 15 (1991), 10 (1992)

Ich möchte eine Variable (Wörterbuch) in Python schreiben, die es mir ermöglicht, in einem bestimmten Jahr nach einem bestimmten Wert zu suchen (zB: Männer (1992) = 42)

Mein bester Vorschlag ist bisher ein Wörterbuch mit Tupeln in so etwas zu machen.

people = { 
    'year': (1991, 1992), 
    'men': (35, 42), 
    'women': (38, 39), 
    'children': (15, 10) 
    } 

Dies macht es jedoch offensichtlich nicht möglich, in einem bestimmten Jahr nach beiden spezifischen Werten zu suchen.

Antwort

1

Sie wollen eine verschachtelte dict:

people = { 
    "men": { 
     1991: 35, 
     1992: 42 
    }, 
    "women": { 
     1991: 38, 
     1992: 39 
    }, 
    "children": { 
     1991: 15, 
     1992: 10 
    } 
} 

Jetzt können Sie people['men'][1991] tun das Ergebnis zu erhalten 35.

+0

Dank Ihrer Antworten. Ist es möglich, Tupel in diesem zu verwenden, oder um es neu zu schreiben? Das ist es, was ich tun soll, aber ich bin völlig verloren ... Wie auch immer, vielen Dank. – AH7

+0

Wenn Sie wollen, aber ich weiß nicht, was Sie mit Tupel hier tun wollen. –

3

Ich würde so etwas wie die folgenden Vorschlag:

people = {'1991':{'men':35, 'women':38, 'children':15}, 
      '1992':{'men':42, 'women':39, 'children':10}} 

Dann können Sie Zugriff auf spezifische Beispieldaten mit:

print(people['1991']['men']) 

EDIT

Wenn Sie wirklich Tupel verwenden müssen und wir müssen auch die Kennungen/Tasten Sie Listen von Tupeln wie so verwenden müssen:

people = {'1991':[('men', 35), ('women', 38), ('children', 15)], 
       '1992':[('men', 42), ('women', 39), ('children', 10)]} 

Bei dieser Variante Sie zugreifen können die gleichen Daten wie:

print(people['1991'][0][1]) 
+0

Danke für Ihre Antwort. Ist es möglich, Tupel in diesem zu verwenden, oder um es neu zu schreiben? Das ist es, was ich tun soll, aber ich bin völlig verloren ... Wie auch immer, vielen Dank. – AH7

+0

Sie können Tupel anstelle von inneren dicts verwenden, dann wäre 'people ['1991'] [0] für Männer, usw. –

+0

Hm ... Ich bekomme nur eine Fehlermeldung, wenn ich es versuche, gibt es etwas anderes als den Austausch" {"mit" ("Ich sollte tun?Die Nachricht sagt "Statement erwartet" ... – AH7

0

Ich schlage vor, Sie legen das Wörterbuch in eine benutzerdefinierte Klasse. Dies gibt Ihnen viel Flexibilität, unabhängig davon, wie die Daten im Wörterbuch selbst angelegt sind, da Sie Methoden zum Hinzufügen, Ändern und Löschen von Einträgen in der Tabelle erstellen können, die die Details der Datenstruktur verbergen.

Zum Beispiel, sagen wir mal Sie organisiert die Daten im Wörterbuch wie folgt entschieden haben:

{1991: {'men': 35, 'women': 38, 'children': 15}, 
1992: {'men': 42, 'women': 39, 'children': 10}} 

Dann könnten Sie, dass wickeln in einer Klasse wie folgt aus:

für
class People(object): 
    def __init__(self): 
     self._data = {} 
    def add(self, year, men, women, children): 
     self._data[year] = dict(men=men, women=women, children=children) 
    def lookup(self, key, year): 
     return self._data[year][key] 
    def delete(self, year): 
     del self._data[year] 

people = People() 
people.add(1991, 35, 38, 15) 
people.add(1992, 42, 39, 10) 

print(people.lookup('women', 1991)) # --> 38 
print(people.lookup('men', 1992)) # --> 42 
Verwandte Themen