사전 값을 여러 개 가져오는 방법?
저는 파이썬으로 된 사전을 가지고 있는데, 제가 하고 싶은 것은 목록으로 몇 가지 값을 얻는 것입니다. 하지만 이것이 구현에서 지원되는지는 모르겠습니다.
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
제가 이것을 이룰 수 있는 방법이 있을까요?제 예에서는 쉬워 보이지만, 20개 항목의 사전이 있고 키 5개를 원한다고 가정해 보겠습니다.다음을 수행하는 것 외에 다른 방법이 있습니까?
myDictionary.get('firstKey')
myDictionary.get('secondKey')
myDictionary.get('thirdKey')
myDictionary.get('fourthKey')
myDictionary.get('fifthKey')
이에 대한 함수가 이미 있습니다.
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
둘 이상의 인수가 전달되면 튜플을 반환합니다.목록 전달하기itemgetter
,사용하다
itemgetter(*wanted_keys)(my_dict)
명심하세요itemgetter
에서는 키가 하나만 요청된 경우 출력을 튜플로 래핑하지 않으며, 요청된 0개의 키를 지원하지 않습니다.
사용for
루프:
keys = ['firstKey', 'secondKey', 'thirdKey']
for key in keys:
myDictionary.get(key)
또는 목록 이해:
[myDictionary.get(key) for key in keys]
저는 매우 유용한 것을 제안합니다.map
함수를 사용하면 함수가 목록에서 요소별로 작동할 수 있습니다.
mydictionary = {'a': 'apple', 'b': 'bear', 'c': 'castle'}
keys = ['b', 'c']
values = list( map(mydictionary.get, keys) )
# values = ['bear', 'castle']
사용할 수 있습니다.At
pydash에서:
from pydash import at
my_dict = {'a': 1, 'b': 2, 'c': 3}
my_list = at(my_dict, 'a', 'b')
my_list == [1, 2]
여기에는 유사한 답변이 없으므로 (리스트/제너레이터) 이해를 사용하여 여러 값을 풀고 코드 한 줄로 여러 변수에 할당할 수 있습니다.
first_val, second_val = (myDict.get(key) for key in [first_key, second_key])
목록 이해는 추가 수입이 필요 없는 가장 깨끗한 방법 중 하나라고 생각합니다.
>>> d={"foo": 1, "bar": 2, "baz": 3}
>>> a = [d.get(k) for k in ["foo", "bar", "baz"]]
>>> a
[1, 2, 3]
또는 값을 개별 변수로 사용하려면 다중 할당을 사용합니다.
>>> a,b,c = [d.get(k) for k in ["foo", "bar", "baz"]]
>>> a,b,c
(1, 2, 3)
%timeit
위에 나열된 모든 답변에 대한 응답.해결책 중 일부를 놓쳤다면 죄송합니다. 그리고 저는 판단력을 이용하여 비슷한 답변을 구했습니다. itemgetter
제겐 승자인 것 같습니다. pydash
보고하는 시간은 훨씬 적지만 왜 루프가 더 적게 실행되는지도 모르겠고 가장 빠르게 부를 수 있을지도 모르겠습니다.당신의 생각은?
from operator import itemgetter
my_dict = {x: x**2 for x in range(10)}
req_keys = [1, 3, 2, 5]
%timeit itemgetter(1, 3, 2, 5)(my_dict)
257 ns ± 4.61 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit [my_dict.get(key) for key in req_keys]
604 ns ± 6.94 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit list( map(my_dict.get, req_keys) )
529 ns ± 34.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
!pip install pydash
from pydash import at
%timeit at(my_dict, 1, 3, 2, 5)
22.2 µs ± 572 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit (my_dict.get(key) for key in req_keys)
308 ns ± 6.53 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
s = pd.Series(my_dict)
%timeit s[req_keys]
334 µs ± 58.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
가지고 계신다면,pandas
키를 인덱스로 사용하여 시리즈로 만들 수 있습니다.그래서 뭐 그런 거.
import pandas as pd
s = pd.Series(my_dict)
s[['key1', 'key3', 'key2']]
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)
키에 대한 값 매핑을 유지하려면 대신 딕트 이해를 사용해야 합니다.
{key: myDictionary[key] for key in [
'firstKey',
'secondKey',
'thirdKey',
'fourthKey',
'fifthKey'
]}
리스트 이해 접근법의 약간 다른 변형.
#doc
[dict[key] for key in (tuple_of_searched_keys)]
#example
my_dict = {x: x**2 for x in range(10)}
print([my_dict[key] for key in (8,9)])
폴백 키가 너무 많지 않으면 다음과 같은 작업을 수행할 수 있습니다.
value = my_dict.get('first_key') or my_dict.get('second_key')
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
언급URL : https://stackoverflow.com/questions/24204087/how-to-get-multiple-dictionary-values
'programing' 카테고리의 다른 글
Oracle 10g에서 왼쪽 조인으로 삭제 (0) | 2023.07.17 |
---|---|
ClassNotFoundException: org.flywaydb.core.api.callback입니다.플라이웨이 콜백 (0) | 2023.07.17 |
NSA 특성 문자열을 사용하여 문자열 색상을 변경하시겠습니까? (0) | 2023.07.17 |
Spring Boot 애플리케이션 구성에서 Spring Cloud {cipher}를 사용하는 방법이 있습니까? (0) | 2023.07.17 |
타임스탬프에서 T와 Z는 정확히 무엇을 의미합니까? (0) | 2023.07.17 |