Sorry als deze vraag al bestaat, maar ik ben al geruime tijd aan het zoeken.
Ik heb een woordenboek in python en wat ik wil doen is er enkele waarden uit halen als een lijst, maar ik weet niet of dit wordt ondersteund door de implementatie.
myDictionary.get('firstKey') # works fine
myDictionary.get('firstKey','secondKey')
# gives me a KeyError -> OK, get is not defined for multiple keys
myDictionary['firstKey','secondKey'] # doesn't work either
Maar is er een manier waarop ik dit kan bereiken? In mijn voorbeeld ziet het er eenvoudig uit, maar laten we zeggen dat ik een woordenboek van 20 items heb en ik wil 5 sleutels krijgen. Is er een andere manier dan te doen
myDictionary.get('firstKey')
myDictionary.get('secondKey')
myDictionary.get('thirdKey')
myDictionary.get('fourthKey')
myDictionary.get('fifthKey')
Antwoord 1, autoriteit 100%
Hier bestaat al een functie voor:
from operator import itemgetter
my_dict = {x: x**2 for x in range(10)}
itemgetter(1, 3, 2, 5)(my_dict)
#>>> (1, 9, 4, 25)
itemgetter
retourneert een tuple als er meer dan één argument wordt doorgegeven. Gebruik
. om een lijst door te geven aan itemgetter
itemgetter(*wanted_keys)(my_dict)
Houd er rekening mee dat itemgetter
de uitvoer niet in een tuple verpakt wanneer er slechts één sleutel wordt gevraagd, en geen ondersteuning biedt voor het aanvragen van nul sleutels.
Antwoord 2, autoriteit 66%
Gebruik een for
lus:
keys = ['firstKey', 'secondKey', 'thirdKey']
for key in keys:
myDictionary.get(key)
of een lijstbegrip:
[myDictionary.get(key) for key in keys]
Antwoord 3, autoriteit 32%
Ik zou de zeer nuttige functie map
willen voorstellen, waarmee een functie elementsgewijs op een lijst kan werken:
mydictionary = {'a': 'apple', 'b': 'bear', 'c': 'castle'}
keys = ['b', 'c']
values = list( map(mydictionary.get, keys) )
# values = ['bear', 'castle']
Antwoord 4, autoriteit 8%
U kunt At
gebruiken van pydash:
from pydash import at
my_dict = {'a': 1, 'b': 2, 'c': 3}
my_list = at(my_dict, 'a', 'b')
my_list == [1, 2]
Antwoord 5, autoriteit 5%
Omdat ik hier geen vergelijkbaar antwoord zie, is het de moeite waard om erop te wijzen dat je met het gebruik van een (lijst / generator) begrip, die meerdere waarden kunt uitpakken en ze aan meerdere variabelen kunt toewijzen in een enkele regel code:
p>
first_val, second_val = (myDict.get(key) for key in [first_key, second_key])
Antwoord 6, autoriteit 4%
Als je pandas
hebt geïnstalleerd, kun je er een serie van maken met de sleutels als index. Dus zoiets als
import pandas as pd
s = pd.Series(my_dict)
s[['key1', 'key3', 'key2']]
Antwoord 7, autoriteit 3%
Ik denk dat het begrijpen van lijsten een van de schoonste manieren is waarvoor geen extra invoer nodig is:
>>> d={"foo": 1, "bar": 2, "baz": 3}
>>> a = [d.get(k) for k in ["foo", "bar", "baz"]]
>>> a
[1, 2, 3]
Of als u de waarden als individuele variabelen wilt, gebruik dan meervoudige toewijzing:
>>> a,b,c = [d.get(k) for k in ["foo", "bar", "baz"]]
>>> a,b,c
(1, 2, 3)
Antwoord 8
def get_all_values(nested_dictionary):
for key, value in nested_dictionary.items():
if type(value) is dict:
get_all_values(value)
else:
print(key, ":", value)
nested_dictionary = {'ResponseCode': 200, 'Data': {'256': {'StartDate': '2022-02-07', 'EndDate': '2022-02-27', 'IsStoreClose': False, 'StoreTypeMsg': 'Manual Processing Stopped', 'is_sync': False}}}
get_all_values(nested_dictionary)
Antwoord 9
Als de terugvaltoetsen niet te veel zijn, kun je zoiets doen
value = my_dict.get('first_key') or my_dict.get('second_key')
Antwoord 10
def get_all_values(nested_dictionary):
for key, val in nested_dictionary.items():
data_list = []
if type(val) is dict:
for key1, val1 in val.items():
data_list.append(val1)
return data_list