我在python中做这个交换机的事情,我需要跟踪谁和谁说话,所以如果Alice - > Bob,那么暗示Bob--> Alice.
是的,我可以填充两个哈希映射,但我想知道是否有人有想法用一个哈希映射.
或建议另一种数据结构.
没有多个对话.假设这是一个客户服务呼叫中心,所以当Alice拨入交换机时,她只会和Bob通话.他的回复也只发给她.
相当新的Python,仍然在努力应对如此多的信息.
我所看到的关于词典的所有文档都解释了通过键获取值的各种方法 - 但我正在寻找一种相反的pythonic方法 - 通过值获取键.
我知道我可以遍历键并检查它们的值,直到找到我正在寻找的值,然后抓住键,但我正在寻找直接路线.
给出一对一的词典(=双射)生成àla
for key, value in someGenerator:
myDict[key] = value
Run Code Online (Sandbox Code Playgroud)
可以通过添加来简单地创建反向查找字典
invDict[value] = key
Run Code Online (Sandbox Code Playgroud)
到for循环.但这是一种Pythonic方式吗?我是否应该编写另外一个class Bijection(dict)管理这个反向字典并提供第二个查找功能的?或者这样的结构(或类似结构)是否已经存在?
我不知道该怎么称呼我正在寻找的东西; 所以,如果我没有在其他地方找到这个问题,我道歉.简而言之,我正在编写将直接与Linux内核连接的python代码.它很容易从包含头文件中获取所需的值并将它们写入我的源代码:
IFA_UNSPEC = 0
IFA_ADDRESS = 1
IFA_LOCAL = 2
IFA_LABEL = 3
IFA_BROADCAST = 4
IFA_ANYCAST = 5
IFA_CACHEINFO = 6
IFA_MULTICAST = 7
Run Code Online (Sandbox Code Playgroud)
在构造要发送到内核的结构时,它很容易使用这些值.但是,它们几乎无助于解析内核响应中的值.
如果我将值放入dict中,我将不得不扫描dict中的所有值,从我假设的内核中查找每个结构中每个项的键.必须有一种更简单,更有效的方式.
你会怎么做?(如果关闭的话,请随时重新提出问题)
在Python中,对象的双向映射以及每对的标志值的最佳数据结构是什么?例如,让我们想象一下,我想要两个男女混合在一起.我想要一个数据结构来存储de matches,这样我就可以访问每个女人的相应男人,每个男人的相应女人,比方说,代表这对夫妇价值的数字.
关键特性是我希望以恒定的时间(大约是字典中的密钥访问时间)访问所有这些数据,而不会浪费构造的资源.
如果没有"旗帜价值"的特殊性,那么这篇文章中bidict建议的库绝对是完美的.实际上,每次我在我的全明星夫妇数据结构中添加一对,它会自动更新以避免一夫多妻制:
couples = bidict({
'leonard' : 'penny',
'howard' : 'bernadette',
'sheldon' : 'amy'
})
couples.forceput('stephen', 'amy')
print couples
>> bidict({'stephen': 'amy', 'leonard': 'penny', 'howard': 'bernadette'})
Run Code Online (Sandbox Code Playgroud)
我现在正在寻求有关实现quality功能的最有效和pythonic方式的建议,例如:
quality('stephen', 'amy')
>> 0.4
couples.forceput('sheldon', 'amy', quality = 1.0)
quality('sheldon', 'amy')
>> 1.0
quality('stephen', 'amy')
>> Raise KeyError
Run Code Online (Sandbox Code Playgroud) 函数返回两个逻辑映射为一对一的列表.假设
name = ["facebook", "twitter", "myspace"]
hits = [4000, 2500, 1800]
Run Code Online (Sandbox Code Playgroud)
因此,facebook的点击量为4000,twitter 2500和myspace 2500.
我想这两个单独的列表转换成词典列表像
[
{name: 'facebook',data: [4000]},
{name: 'twitter',data: [2500]},
{name: 'myspace',data: [1800]}
]
Run Code Online (Sandbox Code Playgroud)
我这样做的解决方案是:
data = [
{"name":l, "data":[v]}
for idx1, l in enumerate(labels)
for idx2, v in enumerate(values)
if idx1 == idx2
]
Run Code Online (Sandbox Code Playgroud)
是否有更优雅的方式来处理逻辑一对一映射或我的解决方案是否准确?
让我们有一个以下的词:
table = {x1: {y1: 1, y2:2},
x2: {y1: 3, y2:4},
x3: {y3: 5, y2:6}
}
Run Code Online (Sandbox Code Playgroud)
考虑到值是唯一的,有没有办法根据值有效地查询关键路径,或者最好使用值作为关键字来重建字典?
例:
result = magic_function(table, 3)
result --> [x2, y1]
Run Code Online (Sandbox Code Playgroud)
谢谢,
字典通常很适合按键查找值,但按值查找键非常慢
for k,v in dictionary.items():
if v = myValue:
return k
Run Code Online (Sandbox Code Playgroud)
是否已有一个数据结构,使key-> value和ke