dict

Ekkart Kleinod  • 
a = dict(one=1, two=2, three=3)
b = {'three': 3, 'two': 2, 'one': 1}
c = dict([('two', 2), ('one', 1), ('three', 3)])
d = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
e = dict({'three': 3, 'one': 1, 'two': 2})
a == b == c == d == e
  • Zugriff auf Elemente: dict[k] oder dict.get(k), wobei get noch einen optionalen Defaultwert hat: dict.get(k, default)
  • Keys müsse hashable sein

Dict Comprehension

Dicts erstellen

dial_codes = [
    (880, 'Bangladesh'),
    (55,  'Brazil'),
    (86,  'China'),
    (91,  'India'),
    (62,  'Indonesia'),
    (81,  'Japan'),
    (234, 'Nigeria'),
    (92,  'Pakistan'),
    (7,   'Russia'),
    (1,   'United States'),
]
country_dial = {country: code for code, country in dial_codes}
print(country_dial)
print({code: country.upper() for country, code in sorted(country_dial.items()) if code < 70})
{'Bangladesh': 880,
'Brazil': 55,
'China': 86,
'India': 91,
'Indonesia': 62,
'Japan': 81,
'Nigeria': 234,
'Pakistan': 92,
'Russia': 7,
'United States': 1}
{55: 'BRAZIL', 62: 'INDONESIA', 7: 'RUSSIA', 1: 'UNITED STATES'}

Key erzeugen und Element einfügen

bisher

index = {}
if "mykey" not in index:
    index["mykey"] = []
index["mykey"].append("Hello")

kürzer mit default-Wert

index = {}
index.setdefault("mykey", []).append("Hello")

kürzer mit defaultdict

  • alle keys haben denselben Typ (list)
  • Aufruf von dict[k] erzeugt den Defaultwert
  • bis dahin funktionieren k in dict und dict.get(k) wie gewohnt
import collections

index = collections.defaultdict(list)
index["mykey"].append("Hello")

Elemente zählen mit Counter

most_common zeigt die angegebene Anzahl an, egal, ob es noch andere Elemente mit gleichem count gibt

import collections

ct = collections.Counter('abracadabra')
print (ct)
print(ct.most_common(2))
Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
[('a': 5), ('b': 2)]

keys, value, items

.keys(), .values() und .items() erzeugen read-only-Instanzen von dict_keys, dict_values und dict_items

Sehr schnell, kein Overhead, immutable. Gern benutzen.