source

목록의 각 사전에 요소 추가(목록 이해)

ittop 2023. 5. 2. 23:00
반응형

목록의 각 사전에 요소 추가(목록 이해)

사전 목록이 있는데 이 목록의 각 요소에 대한 키를 추가하려고 합니다.노력했습니다.

result = [ item.update({"elem":"value"}) for item in mylist ]

그러나 업데이트 방법이 없음을 반환하여 결과 목록이 없음으로 가득 찼습니다.

result = [ item["elem"]="value" for item in mylist ]

구문 오류를 반환합니다.

목록 이해력을 사용하고 싶다면 여기에 훌륭한 답이 있습니다: https://stackoverflow.com/a/3197365/4403872

이 경우 다음과 같습니다.

result = [dict(item, **{'elem':'value'}) for item in myList]

예:

myList = [{'a': 'A'}, {'b': 'B'}, {'c': 'C', 'cc': 'CC'}]

그러면 다음 중 하나를 사용합니다.

result = [dict(item, **{'elem':'value'}) for item in myList]

또는

result = [dict(item, elem='value') for item in myList]

마침내.

>>> result
[{'a': 'A', 'elem': 'value'},
 {'b': 'B', 'elem': 'value'},
 {'c': 'C', 'cc': 'CC', 'elem': 'value'}]

업데이트된 사전에 대한 참조는 이전 사전에 대한 참조와 동일하므로 새 사전 목록을 구성할 필요가 없습니다.

 for item in mylist:
    item.update( {"elem":"value"})

@vk1011의 답변은 좋고 스프레드 연산자로 간결하게 확장할 수 있으며 새로운 사전 객체는 추가적인 이점입니다.

  1. 기존 키의 값을 새 키로 재정의하려면 새 항목 앞에 스프레드 연산자를 배치할 수 있습니다.

    result = [{**item, 'elem':'value'} for item in myList]
    
  2. 새 항목의 값을 기존 항목으로 재정의하려면 새 항목 다음에 스프레드 연산자를 사용

    result = [{'elem':'value', **item} for item in myList]
    

두 방법 모두 새 항목을 포함한 사전 개체 목록을 제공합니다.

전통적이지만 다른(세련된) 답변보다 빠릅니다.

myList = [{'a': 'A'}, {'b': 'B'}, {'c': 'C', 'cc': 'CC'}]
for item in myList: item['elem']='value'

일부 시간:

%timeit result = [dict(item, **{'elem':'value'}) for item in myList]
865 ns ± 8.89 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit result = [dict(item, elem='value') for item in myList]
854 ns ± 5.37 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit result = list(map(lambda item: dict(item, elem='value'), myList))
1.22 µs ± 86.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit for item in myList: item.update({'elem':'value'})
464 ns ± 3.72 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit for item in myList: item['elem']='value'
124 ns ± 0.31 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%timeit [dict(list(item.items()) + [("elem", "value")]) for item in myList]
1.59 µs ± 14.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

지도를 사용할 수 있습니다.

result = map(lambda item: dict(item, elem='value'), myList)

요소 리스트가 이미 있는 경우 다음 작업을 수행할 수 있습니다.

#elements = ['value'] * len(myList)
result = map(lambda item: dict(item[0], elem=item[1]),zip(myList,elements))

그러면 당신은 결과를 얻게 됩니다.

>>> a = [ { 1:1 }, {2:2}, {3:3} ]
>>> for item in a:
...     item.update( { "test": "test" } )
... 
>>> a
[{'test': 'test', 1: 1}, {'test': 'test', 2: 2}, {'test': 'test', 3: 3}]

목록 이해력을 잘못 사용하고 있습니다. 통화 내용은 다음과 같습니다.item.update를 반환합니다.None값을 지정하면 새로 작성된 목록은 다음으로 가득 찰 것입니다.None예상치 대신 값dict가치.

목록에는 목록에 대한 참조가 포함되어 있기 때문에 목록의 항목을 루프하고 그에 따라 각각을 업데이트하면 됩니다.dict가치.

목록 이해를 사용하지 않거나 원본 딕트와 새 키를 기반으로 새 딕트를 반환합니다.

[dict(list(item.items()) + [("elem", "value")]) for item in mylist]

언급URL : https://stackoverflow.com/questions/14071038/add-an-element-in-each-dictionary-of-a-list-list-comprehension

반응형