假設我有一個看起來像這樣的嵌套字典:
numbers = {
'one': {"square": "one", "cube": "one"},
'two': {"square": "four", "cube": "eight"},
'three': {"square": "nine", "cube": "twenty-seven"},
'four': {"square": "sixteen", "cube": "sixty-four"}
}
我想將正方形和立方體解壓縮到串列中。我可以這樣做:
squares = [n["square"] for n in numbers.values()]
cubes = [n["cube"] for n in numbers.values()]
但這對于重復的代碼似乎不太令人滿意。我也可以引入 numpy 并執行以下操作:
import numpy
squares_array, cubes_array = numpy.array([(n["square"],n["cube"]) for n in numbers.values()]).T
并且巧妙地將所有內容解壓縮到 numpy 陣列中,但它看起來有點不令人滿意,因為我不需要 numpy 來執行此操作,并且在我高度主觀的意見中,最后進行轉置有點奇怪。對我來說,這似乎不是“pythonic”。
所以問題是我如何在沒有 numpy 的情況下在一行中做到這一點?
uj5u.com熱心網友回復:
squares, cubes = zip(*[(n["square"], n["cube"]) for n in numbers.values()])
uj5u.com熱心網友回復:
您可以使用zip和迭代器:
squares, cubes = map(list, zip(*(d.values() for d in numbers.values())))
如果有更多鍵或不同的順序,請手動指定它們:
squares, cubes = map(list, zip(*([d['square'], d['cube']]
for d in numbers.values())))
輸出:
>>> squares
['one', 'four', 'nine', 'sixteen']
>>> cubes
['one', 'eight', 'twenty-seven', 'sixty-four']
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/412418.html
標籤:
上一篇:蟒蛇詞典。兩個字串作為鍵
