2017-05-11 9 views
0

は、私が入力を処理し、例えば、リスト内のJSONデータを返す機能を持っていると仮定しますマップすると、同じデータを持つ別のリストが作成されます。リストは今すぐは最外リストを削除

[[{'A': 1, 'B': 2'}], [{'A': 5, 'B': 9}]] 

外側のリストは1つの要素しか持たず、リストには不必要です。私はそれを繰り返し、別のリストを作成することができますが、それは "マップ"の使用効率を犠牲にします。どのようにマップを取得して、通常のリストを返すだけですか?

[{'A': 1, 'B': 2}, {'A': 5, 'B': 9}] 

更新1 - もともと名= [ 'ボブ'] - アップデート名は、2つの要素の代わりに、1を持っています。また、追加のname要素に一致するように返される実際のリストも修正されました。

私が試した1つの方法だが、ネストされたループが関係していた。もっと良い選択肢?

>>> results = [[{'A': 1, 'B': 2}], [{'A': 5, 'B': 9}]] 
>>> newresult = [item for sublist in results for item in sublist] 
>>> newresult 
[{'B': 2, 'A': 1}, {'B': 9, 'A': 5}] 
+0

'listfound = listfound [0]'または 'listfound、= listfound' – zondo

+0

明らかです。私は物事を複雑にしています。ありがとう。 – dreamzboy

+0

しかし、どうしてマップを使用しているのですか?ちょうど 'listfound = findme( 'bob')' – zondo

答えて

0

JSONデータはリストを返し、マップは別のリストにも入れます。希望の出力を得るためにデータをマッサージする必要があります。

リストの理解のように思われます。

>>> import timeit 
>>> from itertools import chain 

>>> def listcomp(): 

    sample = [[{'B': 2, 'A': 1}], [{'B': 9, 'A': 5}]] 
    results = [item for sublist in sample for item in sublist] 

    return results 

>>> 

>>> def iterchain(): 

    sample = [[{'B': 2, 'A': 1}], [{'B': 9, 'A': 5}]] 
    results = list (chain.from_iterable (sample)) 

    return results 

>>> 

>>> timeit.timeit (listcomp, number = 5000000) 
7.123541992972605 

>>> timeit.timeit (iterchain, number = 5000000) 
8.06846271501854 
関連する問題