【发布时间】:2017-12-16 18:35:40
【问题描述】:
问题描述
我想使用一个对象作为字典中的键。我想用来比较键的字典属性是:DDATE, WEEK_PERIOD, DPERIOD, RPERIOD, ALLIANCE, DTIME, RTIME。我想排除属性DCXR, RCXR, DCNX, RCNX。
算法的输出应该是:
AC、DL、SN、AF、LH
问题是它只作为输出产生:
交流自动对焦
其他值完全丢失。但是,当我将 DCXR, RCXR, DCNX, RCNX 添加到 hash 和 eq 时,我得到了正确的输出。但我不想要那个!!当我在字典中插入键时,我不想使用它们。
我不明白为什么它会排除输出中的其他值。据我所知,当我将对象用作字典中的键时,我不必使用所有属性。
以下源代码会产生错误。
源代码
#!/usr/bin/env python
import os
import sys
import argparse
from collections import defaultdict
from functools import partial
class Key(object):
def __init__(self, DDATE, WEEK_PERIOD, DPERIOD, RPERIOD, ALLIANCE, DTIME, RTIME, DCXR, RCXR, DCNX, RCNX):
self.DDATE = DDATE
self.WEEK_PERIOD = WEEK_PERIOD
self.DPERIOD = DPERIOD
self.RPERIOD = RPERIOD
self.ALLIANCE = ALLIANCE
self.DTIME = DTIME
self.RTIME = RTIME
self.DCXR = DCXR
self.RCXR = RCXR
self.DCNX = DCNX
self.RCNX = RCNX
def __hash__(self):
return hash((self.DDATE, self.WEEK_PERIOD, self.DPERIOD, self.RPERIOD, self.ALLIANCE,
self.DTIME, self.RTIME))
def __eq__(self, other):
return (self.DDATE, self.WEEK_PERIOD, self.DPERIOD, self.RPERIOD, self.ALLIANCE,
self.DTIME, self.RTIME) == (other.DDATE, other.WEEK_PERIOD, other.DPERIOD, other.RPERIOD, other.ALLIANCE, other.DTIME, other.RTIME)
def __ne__(self, other):
return not(self == other)
if __name__ == "__main__":
dict = defaultdict(partial(defaultdict, list))
key = Key("01/15/17","2","1","2","0","13:50","18:25","AF","AF","CDG","YUL")
dict[key][28].append(10.0)
key = Key("01/15/17","2","1","2","0","13:05","20:10","AC","AC","CDG","YUL")
dict[key][28].append(20.0)
key = Key("01/15/17","2","1","2","0","13:50","18:25","DL","DL","CDG","YUL")
dict[key][28].append(30.0)
key = Key("01/15/17","2","1","2","0","13:05","20:10","SN","SN","CDG","YUL")
dict[key][28].append(40.0)
key = Key("01/15/17","2","1","2","0","13:05","20:10","LH","LH","CDG","YUL")
dict[key][28].append(50.0)
for key in dict.keys():
print key.DCXR
【问题讨论】:
-
我没有,但可能是因为他们发现您的问题不清楚。我还在努力理解你的意思。你能把你的问题说清楚一点吗?
-
@ThierryLathuille 我在字典中插入了 5 个键。我最终只有 2 把钥匙。我不明白为什么。输出应该是AC、DL、SN、AF、LH,但我只得到AC AF。我真的不明白为什么??我也用数据重现了错误
标签: python object dictionary hash