use*_*529 20 python dictionary key
我的问题与字典键有关.我想设置一个包含任意单个对象的3个键的字典.键必须按顺序排列,并且可以具有多种值.例如,
dictionary = {(key1,key2,key3) : object}
Run Code Online (Sandbox Code Playgroud)
key1可以是1到10之间的任何值key2可以是11到20之间的任何值key3可以是21到30之间的任何值
按键的放置顺序很重要.
更具体地说,我的键对应于x,y,z笛卡尔坐标的范围,其中许多物体漂浮在其中.我希望能够基于x,y,z位置对对象的相对位置进行排序.
有什么方法可以设置它,还是我必须采取不同的方法?谢谢你的帮助!
Art*_*nka 12
当然你可以,以及为此创建单个字符串键 - 只需合并你的键的字符串结果,如','.join([k1,k2,k3])
字典由键索引,键可以是任何不可变类型; 字符串和数字总是键.如果元组仅包含字符串,数字或元组,则它们可用作键; 如果元组直接或间接包含任何可变对象,则不能将其用作键.您不能将列表用作键,因为可以使用索引赋值,切片赋值或append()和extend()等方法对列表进行修改.
所以你试图使用元组作为键,这没关系.
请注意,python中的字典未排序.您可以使用collections.OrderedDict.另外,要构建正确的排序,请使用指定了参数键的排序/排序函数来对所需方式进行排序.
编辑样本:
from itertools import product
myDict = {}
for x,y,z in product(range(10), range(10,20), range(20,30)):
myDict[(x,y,z)] = sum([x,y,z])
Run Code Online (Sandbox Code Playgroud)
希望您会发现这很有用。
>>> from math import sqrt
>>> def dist(p1, p2):
... x1, y1, z1 = p1
... x2, y2, z2 = p2
... xd = x1 - x2
... yd = y1 - y2
... zd = z1 - z2
... return sqrt((xd ** 2 + yd ** 2 + zd ** 2))
>>> myPoint = (0,0,0)
>>> class MyObject: pass
>>> myDict = {(1,2,3):MyObject(), (4,5,6):MyObject()}
>>> sorted([dist(myPoint, point) for point in myDict])
10: [3.7416573867739413, 8.774964387392123]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12337 次 |
最近记录: |