I have a 목록니다 딕토스 다음과 같습니다.
[{'value': 'apple', 'blah': 2},
{'value': 'banana', 'blah': 3} ,
{'value': 'cars', 'blah': 4}]
I want ' [& # 39, apple& # 39, & # 39, & # 39, # 39 cars& banana& # 39;;;]'
이렇게 할 수 있는 최선의 방법은 건 뭐가 있어요?
>>> map(lambda d: d['value'], l)
여기서 l 은 명단요 하지만 난, 내가 보고, 이 방법을 사용하여, " sexiest" 나열하십시오 할 것이다.
업데이트:
>>> map(lambda d: d.get('value', 'default value'), l)
업데이트: # 39 m, 람다, 나는 좋아하지 않는 i& 또한 큰 이름 전지전능하심이라 것을 선호한다. this is how I do it 염두에 두고 있는 것이다.
>>> import operator
>>> map(operator.itemgetter('value'), l)
난 좀 더 발전할 수 있는 유일한 기능은 물론 명시적으로 말하고 만들고 싶다.
>>> import operator, functools
>>> get_values = functools.partial(map, operator.itemgetter('value'))
>>> get_values(l)
... [<list of values>]
이후 '3', '목록' 을 반환하는지 반복자가 매핑해야 파이썬 함께 사용하여 반환되기를 바뀌엇어요, 예를 들어 '목록 (맵 (오페라토리아템게테르 (& # 39, value& # 39;), l)'.
이 같은 사건에 대한 한 같이 표현할 수 있는 매우 간단한 [이스마일 Badawi& # 39 의 오토메이티드] (https://stackoverflow.com/a/7271523/908494) 는 말해둘꼐요 the way to go.
그러나 쓸 수 있는 지능형 멀티 절 또는 네스트된 셨으며 더욱 복잡해진 합니다, 그 복잡한 수식을 it& # 39 에 달하는 다른 대안을 알아보고. 몇 가지 다른 방법으로 지정할 수 있습니다 (부분) 다음영업일 xpath 스타일 네스트된 딕트 및 목록 대한 검색 및 kvc 드패스 제슨파스, 구조, 등. 그런데 이 좋은 라이브러리보다는 켜짐이 피피 그들한테는요
예를 들어, s # 39 라는 라이브러리를 사용하여 here& ['드패스'] (https://pypi.org/project/dpath/), 어떻게 그냥 뭔가 좀 더 복잡한 단순화하십시오 있다.
>>> dd = {
... 'fruits': [{'value': 'apple', 'blah': 2}, {'value': 'banana', 'blah': 3}],
... 'vehicles': [{'value': 'cars', 'blah':4}]}
>>> {key: [{'value': d['value']} for d in value] for key, value in dd.items()}
{'fruits': [{'value': 'apple'}, {'value': 'banana'}],
'vehicles': [{'value': 'cars'}]}
>>> dpath.util.search(dd, '*/*/value')
{'fruits': [{'value': 'apple'}, {'value': 'banana'}],
'vehicles': [{'value': 'cars'}]}
또는 using ['제슨파스 ng'] (https://pypi.org/project/jsonpath-ng/):
>>> [d['value'] for key, value in dd.items() for d in value]
['apple', 'banana', 'cars']
>>> [m.value for m in jsonpath_ng.parse('*.[*].value').find(dd)]
['apple', 'banana', 'cars']
이 때문에 언뜻 보면 꽤 간단하게 '찾기' 한 수 없는 것을 포함, 모든 종류의 물건들이 해당되어서는 되돌려줍니다 객체에는 목동들과 정합된 그냥 패스 같은 값을 직접 각 항목. 하지만, '& # 39 와 같은 더 복잡한 경로를 지정할 수 있다는 표현식에서는. [], # 39,' 각 '*' .value& 대신 번역 절을 크게 높일 수 있습니다. 또한 제슨파스 사양명세에 많고 심지어 [온라인 테스터] 는 언어 불가지론 (http://jsonpath.com/) 디버깅할 수 있는 매우 유용합니다.
키 값을 확보하십시오 목록에서 사전의 파이썬?
data =
[{'obj1':[{'cpu_percentage':'15%','ram':3,'memory_percentage':'66%'}]},
{'obj2': [{'cpu_percentage':'0','ram':4,'memory_percentage':'35%'}]}]
for key,value in d.items():
z ={key: {'cpu_percentage': d['cpu_percentage'],'memory_percentage': d['memory_percentage']} for d in value}
print(z)
{'obj1': {'cpu_percentage': '15%', 'memory_percentage': '66%'}}
{'obj2': {'cpu_percentage': '0', 'memory_percentage': '35%'}}
내 생각엔 다음과 같이 간단하게 제공하십시오 아니하였으매 너희는너희가 찾고 있다.
In[5]: ll = [{'value': 'apple', 'blah': 2}, {'value': 'banana', 'blah': 3} , {'value': 'cars', 'blah':4}]
In[6]: ld = [d.get('value', None) for d in ll]
In[7]: ld
Out[7]: ['apple', 'banana', 'cars']
함께 할 수 있다 '는' 번역 '와' 더 우아하고 파이썬 매핑해야 람다 하지만 불가피하게 목록.
작은 입력입니다 목록에 대한 이해력을 이 길을 갈 것 같아요 진짜 큰 단순화표현 신앙이니라 입력은 generator 는 이상적인 방법입니다.
In[11]: gd = (d.get('value', None) for d in ll)
In[12]: gd
Out[12]: <generator object <genexpr> at 0x7f5774568b10>
In[13]: '-'.join(gd)
Out[13]: 'apple-banana-cars'
이것은 대형 입력 가능한 모든 솔루션을 비교
In[2]: l = [{'value': 'apple', 'blah': 2}, {'value': 'banana', 'blah': 3} , {'value': 'cars', 'blah':4}] * 9000000
In[3]: def gen_version():
...: for i in l:
...: yield i.get('value', None)
...:
In[4]: def list_comp_verison():
...: return [i.get('value', None) for i in l]
...:
In[5]: def list_verison():
...: ll = []
...: for i in l:
...: ll.append(i.get('value', None))
...: return ll
In[10]: def map_lambda_version():
...: m = map(lambda i:i.get('value', None), l)
...: return m
...:
In[11]: %timeit gen_version()
172 ns ± 0.393 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In[12]: %timeit map_lambda_version()
203 ns ± 2.31 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In[13]: %timeit list_comp_verison()
1.61 s ± 20.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In[14]: %timeit list_verison()
2.29 s ± 4.58 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
비교해 볼 수 있듯이, 발전기 제품이 보다 느린 것은 또 다른 솔루션에 대한 매핑해야 발생기입니다 비해 최대 OP 내아기마저도 남겨두십시오 그림 초과됩니다.
songs = [
{"title": "happy birthday", "playcount": 4},
{"title": "AC/DC", "playcount": 2},
{"title": "Billie Jean", "playcount": 6},
{"title": "Human Touch", "playcount": 3}
]
print("===========================")
print(f'Songs --> {songs} \n')
title = list(map(lambda x : x['title'], songs))
print(f'Print Title --> {title}')
playcount = list(map(lambda x : x['playcount'], songs))
print(f'Print Playcount --> {playcount}')
print (f'Print Sorted playcount --> {sorted(playcount)}')
# Aliter -
print(sorted(list(map(lambda x: x['playcount'],songs))))