【发布时间】:2018-06-16 01:23:16
【问题描述】:
data = (1,1,1,1,1)
dict_letters = {(1,1,1,1,1) : 'A',
(0,1,1,0,1) : 'B',
(1,1,1,1,1) : 'C',
(1,0,1,0,1) : 'D'}
def search():
for key in dict_letters:
if data == key:
print(dict_letters[key])
search()
#when running, this would result in only 'C' being printed; 'A' was never printed
之前在我的代码中,我获得了一个由 0 和 1 组成的唯一 5 项元组(data 元组)。这 5 个项目对于区分大多数字母(例如“B”和“D”)与我字典中的其他字母至关重要。但是,当有两个键具有相同的 5 个项目时,我遇到了一个问题,因此我在元组中添加了 10 个项目(其他标识数据)以帮助进一步区分键;这是我当前字典的摘录:
data = (0,1,1,0,1,1,1,1,1,1,1,1,1,1,1)
data = (0,1,1,0,1,0,0,0,0,0,0,0,0,0,0)
data = (0,1,1,0,1,0,0,1,1,1,0,0,1,0,1)
#x = 0 or 1
dict_letters = {(1,1,1,1,1,x,x,1,x,x,x,x,x,x,x) : 'A',
(0,1,1,0,1,x,x,x,x,x,x,x,x,x,x) : 'B',
(1,1,1,1,1,x,x,0,x,x,x,x,x,x,x) : 'C',
(1,1,0,0,1,x,x,x,x,x,x,x,x,x,x) : 'D'}
def search():
for key in dict_letters:
if data == key:
print(dict_letters[key])
search()
#I need to find a way for all of the data tuples to print 'B' after running the program
在这段摘录中,我只为其中一项附加项目创造了条件,以区分“A”和“C”。我想知道是否可以忽略其他 9 个附加项目是 0 还是 1,因为它们在区分这两个键时没有用(我希望忽略的项目标有 x)。我还想忽略“B”和“D”的 10 个附加项目,因为前 5 个项目足以识别。例如,我想要一种将(0,1,1,0,1,0,0,0,0,0,0,0,0,0,0)、(0,1,1,0,1,1,1,1,1,1,1,1,1,1,1)、(0,1,1,0,1,0,0,1,1,1,0,0,1,0,1) 等都读取为“B”的方法,而无需为“B”编码 2047 个额外的键。
我尝试在字典之前设置x = 0 or 1 和x = 0 and 1,但这些不起作用,因为我发现在运行程序后出于某种原因将密钥设置为(0,1,1,0,1,1,1,1,1,1,1,1,1,1,1)。
注意:我正在考虑在未来至少使用一次所有附加项目,因此删除 10 个附加项目中的任何一个都不是一种选择。
我对 Python 也比较陌生,所以如果您能尽可能简单地回答,我将不胜感激。提前谢谢!
【问题讨论】:
-
我可以创建一个允许多个不同键输出单个值的字典条目吗?请参阅“例如,我想要一种方式……”。
-
这听起来像XY problem。请给我们更多的上下文,以便我们可以提出比带有疯狂元组键的 dict 更好的解决方案。
-
看起来你的元组键只是整数的二进制表示。为什么不使用它?
-
您的编辑告诉我们更多关于您的解决方案 Y 的信息,但我们需要了解 X 问题,以便我们可以提供 Y 的替代方案。
-
听起来您正在字典键中寻找某种通配符。是这样吗?
标签: python python-2.7 dictionary key