Próbuję zdefiniować serię słowników, a następnie iteres przez nich poniżej. Próbowałem umieścić nazwy słownika na listę, aby go iterować, ale następnie rzucił błąd, że ciąg nie ma metody .keys(). Przypuszczam, że Python uważa, że wartości na liście są po prostu ciągi i nie mają do reprezentowania słowników powyżej.

Nie jestem pewien, jak inaczej mogłem to jednak kodować. Kod jest tutaj:

prem_year_map = {
    2011: 2935,
    2012: 3389,
    2013: 3853,
    2014: 4311, 
}
year_tournament_map = {
    2013: 8273,
    2012: 6978,
    2011: 5861,
    2010: 4940,
}

tournament_list = [prem_year_map, year_tournament_map]

for x in tournament_list:
    years = sorted(tournament_list.keys())
    print years

Czy ktoś może zasugerować alternatywną metodę?

Dzięki

0
gdogg371 16 sierpień 2014, 01:38

3 odpowiedzi

Najlepsza odpowiedź

Przypuszczam, że Python uważa, że wartości na liście są po prostu ciągi i nie mają do reprezentowania słowników powyżej.

To nie jest w porządku. Lista w Pythonie może zawierać każdy rodzaj odniesienia.

Po prostu musisz użyć object.keys() zamiast tournament_list.keys() (ten drugi proszę o przyciski listy, które nie istnieją - słowniki mają klucze)

for x in tournament_list:
    years = sorted(x.keys())
    print years

Jak wskazano @jonclements, można również użyć sorted(x), który zwraca listę (i jest nieco bardziej wydajny w Pythonie 2.x). Zauważ, że nie może zwrócić słownika, ponieważ Standardowy Słownik nie może zachować zamówienia.

2
Martin Konecny 16 sierpień 2014, 00:17

Do Iteracter Dictional Klucz i wartość, którego potrzebujesz, należy użyć innego iteratora.

for key, value in {}.iteritems():
  print key, value

Najlepszym wyborem jest standardowa iTertools.

for key, value in itertools.chain(dict1.iteritems(), dict2.iteritems())
  print key, value

Możesz także wykonać je listę iteratorów i itera.

iterators = []
iterators.append(oneDict.iteritems())

for iterator in iterators:
 for item in iterator:
   yield item # (key, value)

Wybierz, co jest najprostsze.

2
Chameleon 15 sierpień 2014, 21:50

Powinno być:

for x in tournament_list:
    years = sorted(x.keys())
    print years

W przeciwnym razie próbujesz uzyskać keys z listy słowników (co oczywiście nie ma sensu).

1
enrico.bacis 15 sierpień 2014, 21:40