wake-up-neo.com

Greifen Sie auf ein beliebiges Element in einem Wörterbuch in Python zu

Wenn eine mydict nicht leer ist, greife ich auf ein beliebiges Element zu:

mydict[mydict.keys()[0]]

Gibt es einen besseren Weg, dies zu tun?

396
Stan

Auf Python 3 zerstörungsfrei und iterativ:

next(iter(mydict.values()))

Auf Python 2 zerstörungsfrei und iterativ:

mydict.itervalues().next()

Wenn Sie möchten, dass es in Python 2 und 3 funktioniert, können Sie das Paket six verwenden:

six.next(six.itervalues(mydict))

an diesem Punkt ist es jedoch ziemlich kryptisch und ich würde lieber Ihren Code bevorzugen.

Wenn Sie ein Element entfernen möchten, führen Sie folgende Schritte aus:

key, value = mydict.popitem()

Beachten Sie, dass "first" hier kein passender Begriff ist. Dies ist ein beliebiges Element, da dict kein sortierter Typ ist.

481
doublep

Wenn Sie nur auf ein Element zugreifen müssen (durch Zufall das erste Element sein, da Diktate die Reihenfolge nicht garantieren), können Sie dies einfach in Python 2 tun:

my_dict.keys()[0]     -> key of "first" element
my_dict.values()[0]   -> value of "first" element
my_dict.items()[0]    -> (key, value) Tuple of "first" element

Bitte beachten Sie, dass Python (nach meinem besten Wissen) nicht garantiert, dass zwei aufeinanderfolgende Aufrufe einer dieser Methoden eine Liste mit derselben Reihenfolge zurückgeben. Dies wird in Python3 nicht unterstützt.

111
swK

In python3, Der Weg:

dict.keys() 

gib einen Wert in type: dict_keys () zurück. Wir erhalten einen Fehler, wenn das erste Mitglied des Schlüssels von dict auf folgende Weise erhalten wurde:

dict.keys()[0]
TypeError: 'dict_keys' object does not support indexing

Zum Schluss konvertiere ich dict.keys () in list @ 1st und erhielt das erste Mitglied durch List-Splice-Methode:

list(dict.keys())[0]
48
69444091

einen Schlüssel bekommen

next(iter(mydict))

einen Wert bekommen

next(iter(mydict.values()))

beides zu bekommen

next(iter(mydict.items())) # or next(iter(mydict.viewitems())) in python 2

Die ersten beiden sind Python 2 und 3. Die letzten beiden sind in Python 3 faul, aber nicht in Python 2.

23
maxbellec

Wie bereits erwähnt, gibt es kein "erstes Element", da Wörterbücher keine garantierte Reihenfolge haben (sie werden als Hashtabellen implementiert). Wenn Sie zum Beispiel den Wert haben möchten, der dem kleinsten Schlüssel entspricht, wird thedict[min(thedict)] dies tun. Wenn Sie sich für die Reihenfolge interessieren, in der die Schlüssel eingefügt wurden, d. H. Mit "zuerst" meinen Sie "frühestens eingefügt", können Sie in Python 3.1 collection.OrderedDict verwenden, das sich auch in der kommenden Python 2.7 befindet. Laden Sie bei älteren Python-Versionen den bestellten dict backport (2.4 und höher) herunter, installieren Sie ihn und verwenden Sie ihn. Hier finden Sie hier .

Python 3.7Jetzt Diktiere sind Einfügungsreihenfolge.

16
Alex Martelli

Wie wäre es damit. Hier noch nicht erwähnt.

py 2 & 3

a = {"a":2,"b":3}
a[list(a)[0]] # the first element is here
>>> 2
13
animaacija

Das Ignorieren von Problemen im Zusammenhang mit der Diktorbestellung könnte besser sein:

next(dict.itervalues())

Auf diese Weise vermeiden wir das Nachschlagen von Elementen und das Generieren einer Liste von Schlüsseln, die wir nicht verwenden.

Python3

next(iter(dict.values()))
10
Matt Joiner

In Python3 

list(dict.values())[0]
7
Oleg Matei

Für beide Python 2 und 3:

import six

six.next(six.itervalues(d))
3
oblalex

Sie können immer tun:

for k in sorted(d.keys()):
    print d[k]

Dadurch erhalten Sie einen konsistent sortierten (in Bezug auf builtin . Hash ()) ermittelten Satz von Schlüsseln, die Sie bearbeiten können, wenn die Sortierung eine Bedeutung für Sie hat. Das bedeutet beispielsweise, dass numerische Typen auch dann konsistent sortiert werden, wenn Sie das Wörterbuch erweitern.

BEISPIEL

# lets create a simple dictionary
d = {1:1, 2:2, 3:3, 4:4, 10:10, 100:100}
print d.keys()
print sorted(d.keys())

# add some other stuff
d['peter'] = 'peter'
d['parker'] = 'parker'
print d.keys()
print sorted(d.keys())

# some more stuff, numeric of different type, this will "mess up" the keys set order
d[0.001] = 0.001
d[3.14] = 'pie'
d[2.71] = 'Apple pie'
print d.keys()
print sorted(d.keys())

Beachten Sie, dass das Wörterbuch beim Drucken sortiert wird. Der Schlüsselsatz ist jedoch im Wesentlichen eine Hashmap!

3
Philipp Meier

einfachste Möglichkeit für Python3:

list(dict.keys())[0]
2
arispen

Ein Update der Antwort von @ swK, basierend auf dem Kommentar von @alldayremix:

In Python 3 verwenden Sie:

list(my_dict.keys())[0]     -> key of "first" element
list(my_dict.values())[0]   -> value of "first" element
list(my_dict.items())[0]    -> (key, value) Tuple of "first" element
2
Qaswed

Keine externen Bibliotheken, funktioniert auf Python 2.7 und 3.x:

>>> list(set({"a":1, "b": 2}.values()))[0]
1

Für aribtrary key einfach weglassen .values ​​()

>>> list(set({"a":1, "b": 2}))[0]
'a'
1
Thomas Browne
first_key, *rest_keys = mydict
0
user1994083

Die Unterklasse dict ist eine Methode, die jedoch nicht effizient ist. Wenn Sie hier eine Ganzzahl angeben, wird d[list(d)[n]] zurückgegeben.

class mydict(dict):
    def __getitem__(self, value):
        if isinstance(value, int):
            return self.get(list(self)[value])
        else:
            return self.get(value)

d = mydict({'a': 'hello', 'b': 'this', 'c': 'is', 'd': 'a',
            'e': 'test', 'f': 'dictionary', 'g': 'testing'})

d[0]    # 'hello'
d[1]    # 'this'
d['c']  # 'is'
0
jpp