Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:将x、y、z数据转换为字典,并使用x、y作为元组键_Python - Fatal编程技术网

Python:将x、y、z数据转换为字典,并使用x、y作为元组键

Python:将x、y、z数据转换为字典,并使用x、y作为元组键,python,Python,我对Python知之甚少,我的谷歌技能也让我失望。我已经导入了csv并获得了一个列表,其中包括: a = ([x1,y1,z1]...[xn,yn,zn]) 我想要一个字典,其中唯一的x,y组合具有所有的z值。我创建了一个将唯一的x,y值作为元组的列表,但我不知道如何将它们转换为一个字典,其中元组是键,z值为每个键列出。有人有什么建议吗 在这个场景中的具体用途是我有各种各样的x,y坐标,它们都有一个相关的值,最终的目标是为每个x,y坐标找到最高的值,看起来创建字典是正确的方法 例如: 给定 a

我对Python知之甚少,我的谷歌技能也让我失望。我已经导入了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}

简单的听写理解

{(item[0],item[1]):item[2] for item in a}
备选方案1:键作为由其他值组成的单个值 如果可以将键解析为文本,则可以使用由它们组成的单个值作为键:

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'}

备选方案2:使用实际元组作为键 如果确实要使用元组(而不是组合的单个值),可以使用:

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'}

备选方案1:将键作为由其他值组成的单个值 如果可以将键解析为文本,则可以使用由它们组成的单个值作为键:

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'}

备选方案2:使用实际元组作为键 如果确实要使用元组(而不是组合的单个值),可以使用:

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)

如果您只对最高值感兴趣,请执行以下操作:

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)

这是一种获得指定结果的简单方法:

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 
b={}
对于a中的[x,y,z]:
如果b中的(x,y):
如果b[(x,y)]
不管它值多少钱,这是一种获得指定结果的简单方法:

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 
b={}
对于a中的[x,y,z]:
如果b中的(x,y):
如果b[(x,y)]
使用setdefault

d = {}
for [x, y, z] in a:
 d.setdefault((x,y),[]).append(z)
使用setdefault

d = {}
for [x, y, z] in a:
 d.setdefault((x,y),[]).append(z)

你能举个小例子(用实际值)说明你拥有什么和你想要什么吗?当然,我会加上它和一些澄清(我不得不出去开会,不得不匆匆离开一会儿)你能举个小例子(用实际值)说明你拥有什么和你想要什么吗?当然,我会加上它和一些澄清(我不得不出去开会,不得不匆匆离开一会儿)不,它们是由另外两个值组成的单个值,如果这两个值都可以解析为字符串,那么它们的工作方式将类似于元组。你真的需要将它们分开吗?我编辑了我的答案,添加了一个使用元组作为键的备选值。只是为了澄清。我没有发布问题。其次,只有当值是strin时,它们才会相同元组中的g(但这是一个错误的假设)这是一个公平的论点,实际上取决于用例。我习惯于把数字看成是数字,我没有考虑把每个唯一的坐标组合转换成一个字符串。如果我这样做,我必须在输出所有东西之前把它转换回来,但是它可以简化整体的事情。不,它们是由两个组成的单个值,如果是BO的话。这些值可以被解析为一个字符串,其工作原理与元组类似。你真的需要将它们分开吗?我编辑了我的答案,以添加一个使用元组作为键的替代项。只是为了澄清。我没有发布这个问题。其次,只有当值是元组中的字符串时才会相同(但这是一个错误的假设)这是一个公平的论点,实际上取决于用例。我习惯于把数字看作是数字,我没有考虑把每个唯一的坐标组合转换成一个字符串。如果我这样做,我必须在输出所有东西之前把它转换回来,但是它可以简化所有的东西。它只存储一个Z值,只存储一个Z。b值