我想通過鍵“IP”和該鍵的值過濾字典串列。例如,這是我的清單。
**
a=[{'IP': '192.168.0.5', 'Temp1': ['58.0']},
{'IP': '192.168.0.6', 'Temp1': ['59.1']},
{'IP': '192.168.0.5', 'Temp2': ['59.1']},
{'IP': '192.168.0.6', 'Temp2': ['60.7']}]
**
有可能讓它看起來像這樣嗎?
我想按“IP”過濾,所以它看起來像這樣:
**
filtered=[{'IP': '192.168.0.5', 'Temp1': ['58.0'],'Temp2': ['59.1']},
{'IP': '192.168.0.6', 'Temp1': ['59.1'],'Temp2': ['60.7']}]
**
但是我不知道該怎么做,有人可以給我解釋一下嗎?
uj5u.com熱心網友回復:
這應該這樣做:
a=[{'IP': '192.168.0.5', 'Temp1': ['58.0']},
{'IP': '192.168.0.6', 'Temp1': ['59.1']},
{'IP': '192.168.0.5', 'Temp2': ['59.1']},
{'IP': '192.168.0.6', 'Temp2': ['60.7']}]
filtered=[{'IP': '192.168.0.5', 'Temp1': ['58.0'],'Temp2': ['59.1']},
{'IP': '192.168.0.6', 'Temp1': ['59.1'],'Temp2': ['60.7']}]
import collections
b = collections.defaultdict(dict)
for d in a:
for k, v in d.items():
b[d['IP']][k] = v
c = list(b.values())
print(c)
輸出是:
[{'IP': '192.168.0.5', 'Temp1': ['58.0'], 'Temp2': ['59.1']}, {'IP': '192.168.0.6', 'Temp1': ['59.1'], 'Temp2': ['60.7']}]
uj5u.com熱心網友回復:
這是我們在執行回圈IP: dict之前通過理解構建 dict 的方法:update
>>> a=[{'IP': '192.168.0.5', 'Temp1': ['58.0']},
... {'IP': '192.168.0.6', 'Temp1': ['59.1']},
... {'IP': '192.168.0.5', 'Temp2': ['59.1']},
... {'IP': '192.168.0.6', 'Temp2': ['60.7']}]
>>> by_ip = {ip: {'IP': ip} for ip in {d['IP'] for d in a}}
>>> for d in a:
... by_ip[d['IP']].update(d)
...
>>> filtered = list(by_ip.values())
>>> filtered
[{'IP': '192.168.0.5', 'Temp1': ['58.0'], 'Temp2': ['59.1']}, {'IP': '192.168.0.6', 'Temp1': ['59.1'], 'Temp2': ['60.7']}]
這是一種方法,我們可以通過以下方式在一個瘋狂的嵌套理解中做到這一點functools.reduce:
>>> from functools import reduce
>>> filtered = [reduce(dict.__or__, (d for d in a if d['IP'] == ip), {'IP': ip}) for ip in {d['IP'] for d in a}]
>>> filtered
[{'IP': '192.168.0.5', 'Temp1': ['58.0'], 'Temp2': ['59.1']}, {'IP': '192.168.0.6', 'Temp1': ['59.1'], 'Temp2': ['60.7']}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/436160.html
