[英]Python: convert x,y,z data to dictionary with x,y as tuple keys
我對Python知之甚少,而我的Google技能使我失望。 我已經導入了一個csv並獲得了我有的列表:
a = ([x1,y1,z1]...[xn,yn,zn])
我想要一個字典,其中唯一的x,y
組合具有其所有z
值。 我創建了一個唯一的x,y
值作為元組的列表,但是我不確定如何將它們變成字典,其中元組是鍵,並且每個鍵的z
值都列出了。 有人有指針嗎?
在這種情況下的特定用途是我有各種x,y坐標,它們都有一個與之關聯的值,最終目標是為每個x,y坐標找到最高的值,這似乎就像創建一個字典是正確的方法。
示例:給定
a =([1、1、10],[1、1、20],[1、1、30],[1、2、10],[1、2、20])b = dict()
我想制作一個字典,其中print(b)返回
{(1,1):10,20,30,(1,2):10,20}
再次編輯:
我嘗試了下面的方法,它們似乎起作用了,但后來我意識到我的.csv值已作為字符串導入。 我開始四處尋找解決方案,並看到了使用熊貓的建議。 好吧,30分鍾后,現在我寫了一些東西,可以導入,按x,y列排序,並從每行中導出最大值(大約10行),因此我以一種非常笨拙的方式來解決這個問題。 盡管感謝指針:)
簡單的字典理解
{(item[0],item[1]):item[2] for item in a}
如果可以將鍵解析為文本,則可以使用由它們組成的單個值作為鍵:
a = [['a','b','c'],['d', 'e', 'g']]
b = dict()
for entry in a:
b[f"{entry[0]},{entry[1]}"] = entry[2]
print(b)
在這種情況下,結果字典為{'a,b': 'c', 'd,e': 'g'}
。
如果您確實要使用元組(而不是組合的單個值),則可以使用:
a = [['a','b','c'],['d', 'e', 'g']]
b = dict()
for entry in a:
b[(entry[0],entry[1])] = entry[2]
print(b)
這將返回以下字典: {('a', 'b'): 'c', ('d', 'e'): 'g'}
。
如果您只對最高價值感興趣
b = dict()
for entry in a:
x, y, z = *entry # tuple unpacking
if b.get((x,y), float('-inf')) < z:
b[x,y] = z
print(b)
如果您想擁有所有值(警告:可能會占用空間,並且如果您再次遍歷所有z值並進行比較則可能會比較耗時)
b = dict()
for entry in a:
x, y, z = *entry # tuple unpacking
b.get((x,y), []).append(z)
print(b)
對於它的價值,這是一種獲得指定結果的簡單方法:
a = ([1, 1, 10], [1, 1, 20], [1, 1, 30], [1, 2, 10], [1, 2, 20])
b = {}
for [x,y,z] in a:
if (x,y) in b:
b[(x,y)].append(z)
else:
b[(x,y)] = [z]
b == {(1, 1): [10, 20, 30], (1, 2): [10, 20]}
然后,您可以通過
b_max = {k:max(v) for k,v in b.items()}
或者,您立即收集最大值:
b = {}
for [x,y,z] in a:
if (x,y) in b:
if b[(x,y)] < z:
b[(x,y)] = z
else:
b[(x,y)] = z
使用setdefault
d = {}
for [x, y, z] in a:
d.setdefault((x,y),[]).append(z)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.