IT이야기

Python에서 사전 키를 목록으로 반환하는 방법?

cyworld 2022. 4. 6. 21:03
반응형

Python에서 사전 키를 목록으로 반환하는 방법?

Python 2.7에서는 사전 , 또는 항목을 목록으로 가져올 수 있었다.

>>> newdict = {1:0, 2:0, 3:0}
>>> newdict.keys()
[1, 2, 3]

자, 파이톤 >= 3.3에서 나는 다음과 같은 것을 얻는다.

>>> newdict.keys()
dict_keys([1, 2, 3])

그래서 리스트를 얻으려면 이렇게 해야 해

newlist = list()
for i in newdict.keys():
    newlist.append(i)

궁금한 게 있는데, 파이톤3에 있는 리스트를 반납하는 더 좋은 방법이 없을까?

해보다list(newdict.keys()).

이구동성으로 할 것이다.dict_keys명부에 반대하다

한편, 그것이 중요한지 아닌지 스스로에게 물어봐야 한다.피토닉 코딩 방법은 오리 타자를 가정하는 것이다. (만약 오리처럼 생겼고 오리처럼 쪼그려진다면 그것은 오리다.)dict_keys사물은 대부분의 목적에서 목록처럼 작용할 것이다.예를 들어,

for key in newdict.keys():
  print(key)

분명히 삽입 연산자는 작동하지 않을 수도 있지만, 어쨌든 사전 키 목록에는 그다지 이치에 맞지 않는다.

파이톤 >= 3.5 대안: 리스트 리터럴로 압축을 푼다. [*newdict]

Python 3.5와 함께 새로운 언팩 일반화(PEP 448)가 도입되어 이제 다음과 같은 작업을 쉽게 수행할 수 있게 되었다.

>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]

포장을 풀 때*반복 가능한 모든 개체와 함께 작동하며 사전이 반복될 때 키를 반환하므로 목록 리터럴 내에서 키를 사용하여 목록을 쉽게 만들 수 있다.

추가.keys()[*newdict.keys()]기능 검색 및 호출 비용이 들지만 의도를 좀 더 명확하게 하는 데 도움이 될 수 있다.(솔직히 말하자면, 당신이 정말로 걱정해야 할 것이 아닌가.)

*iterable구문은 하는 것과 비슷하다list(iterable)그리고 그것의 행동은 처음에 파이톤 레퍼런스 매뉴얼의 호출 섹션에 문서화되었다.PEP 448의 경우 어디에 대한 제한 사항*iterable표시는 느슨해져 목록, 설정 및 튜플 리터럴에 배치될 수 있으며, 표현식 목록의 참조 매뉴얼도 업데이트되어 이를 명시하였다.


와 동일하지만list(newdict)함수 호출이 실제로 수행되지 않기 때문에 (적어도 작은 사전의 경우) 더 빠르다는 차이:

%timeit [*newdict]
1000000 loops, best of 3: 249 ns per loop

%timeit list(newdict)
1000000 loops, best of 3: 508 ns per loop

%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns per loop

더 큰 사전의 경우 속도는 거의 같다(대규모 수집을 통한 반복의 오버헤드는 함수 호출의 소비용을 능가한다).


비슷한 방식으로 튜플 및 사전 키 집합을 만들 수 있다.

>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}

튜플 케이스에서 쉼표가 뒤처지지 않도록 주의하십시오!

list(newdict) 하며 파이썬 2와 파이썬 키 newdict.keys()그럴 필요 없어

목록 이해 기능을 사용할 수도 있다.

>>> newdict = {1:0, 2:0, 3:0}
>>> [k  for  k in  newdict.keys()]
[1, 2, 3]

아니면, 더 짧게,

>>> [k  for  k in  newdict]
[1, 2, 3]

참고: 3.7 이하 버전에서는 주문이 보장되지 않는다(주문은 여전히 CPython 3.6을 사용한 구현 세부사항일 뿐이다).

어긋나면 "duck typeing"의 "duck typeing" 의 "duck typeing" 의 "duck type" 의 "duck type" 의 정의dict.keys()목록과 같은 객체가 아닌 수 많은 객체를 반환한다.그것은 리스트가 작동하는 장소도 아니고, 셀 수 없는 장소도 아니다. 리스트도 셀 수 없지만, 셀 수 없는 것은 리스트(또는 시퀀스...)가 아니다.

실제 사용 사례에서, 키를 받아쓰면서 가장 흔히 하는 일은 키를 통해 반복하는 것이므로, 이것은 이치에 맞는다.그리고 만약 당신이 리스트로 그것들을 필요로 한다면 당신은 전화할 수 있다.list().

에 대해 매우 유사하다.zip()- 대부분의 경우, 그것은 반복된다. - 왜 그것을 반복하기 위해 완전히 새로운 튜플 목록을 만든 다음 다시 버리는가?

이것은 python이 여기저기서 리스트의 복사본이 아닌 더 많은 반복기(및 생성기)를 사용하는 큰 경향의 일부다.

dict.keys()하지만 포괄적으로 작용해야 한다. 오타 같은 것은 주의깊게 검사한다...나한텐 잘 먹히는데

>>> d = dict(zip(['Sounder V Depth, F', 'Vessel Latitude, Degrees-Minutes'], [None, None]))
>>> [key.split(", ") for key in d.keys()]
[['Sounder V Depth', 'F'], ['Vessel Latitude', 'Degrees-Minutes']]

키를 별도로 보관해야 하는 경우, 지금까지 제시된 다른 모든 솔루션보다 타이핑을 적게 해야 하는 솔루션이 있으며, 확장 가능한 풀림(Python3)을 사용하십시오.x+:

newdict = {1: 0, 2: 0, 3: 0}
*k, = newdict

k
# [1, 2, 3]

작전 아니. 인물의
k = list(d) 9자(공백 제외)
k = [*d] 6자
*k, = d 5자

를 사용하지 않고 목록으로 변환keys더 읽기 쉽게 만드는 방법:

list(newdict)

,할 때, 사전을 뒤적거릴 .keys():

for key in newdict:
    print key

미리 생성된 키 목록을 필요로 하는 루프 내에서 수정하지 않는 경우:

for key in list(newdict):
    del newdict[key]

Python 2에서는 를 사용하는 한계 성능 이득이 있다.

나는 우리가 사전에서 열쇠를 추출할 수 있는 두 가지 방법을 생각할 수 있다.

방법 1: - .keys() 방법을 사용하여 키를 가져온 다음 목록으로 변환하려면

some_dict = {1: 'one', 2: 'two', 3: 'three'}
list_of_keys = list(some_dict.keys())
print(list_of_keys)
-->[1,2,3]

방법 2: - 빈 목록을 만든 다음 루프를 통해 목록에 키를 추가하는 방법이 루프를 통해 값도 얻을 수 있다(키에는 .key()를 사용하고 키와 값 추출에는 .items()를 사용한다).

list_of_keys = []
list_of_values = []
for key,val in some_dict.items():
    list_of_keys.append(key)
    list_of_values.append(val)

print(list_of_keys)
-->[1,2,3]

print(list_of_values)
-->['one','two','three']

이것이 매우 오래된 대답이라는 것을 알지만, 고전적인 방법(그리고 아마도 더 정확한 방법)을 넘어서서 이것을 하는 것이다.some_dict.keys()) 또한 이를 위한 더 "멋진" 그리고 확실히 더 흥미로운 방법이 있다.

some_dict = { "foo": "bar", "cool": "python!" }
print( [*some_dict] == ["foo", "cool"] )         # True  

참고: 이 솔루션은 개발 환경에서 사용해서는 안 된다. 단지 처음부터 꽤 흥미롭다고 생각했기 때문에 여기에 보여 주었다.*-과잉 과대평가된 관점.또한, 나는 이것이 문서화된 특징인지 아닌지 확신할 수 없으며, 그것의 행동은 이후 버전에서 바뀔 수 있다. :)

그래, 파이톤3에서 이것을 하는 더 좋고 간단한 방법이 있다.x

inbuild 목록 사용함수

#Devil
newdict = {1:0, 2:0, 3:0}
key_list = list(newdict)
print(key_list) 
#[1, 2, 3] 

코드 한 줄에 키 목록을 가져오는 가장 좋은 방법

dict_variable = {1:"a",2:"b",3:"c"}  
[key_val for key_val in dict_variable.keys()]

참조URL: https://stackoverflow.com/questions/16819222/how-to-return-dictionary-keys-as-a-list-in-python

반응형