具有多个键的字典映射到相同的值

时间:2017-06-15 11:27:14

标签: python dictionary lookup-tables

我需要将一个整数值和索引放入相应字符串的表中。在这种情况下,连续的整数范围应该都映射到相同的字符串。像(使用非工作字典示例):

int_dict = { 0              : "String1",
             1              : "String2",
             2              : "String3",
             range(3,15)    : "String4",
             16             : "String5"   };

正如预期的那样,在这里使用range失败并尝试使用列表会产生错误TypeError: unhashable type: 'list'

字典可能不是此任务的最佳数据结构。那么,我的问题是,如何轻松完成这样的事情?范围往往非常大,因此通过手动定义(除非可以使用range之类的东西)这样做不是一种选择。

5 个答案:

答案 0 :(得分:1)

这是你想要达到的目标吗?

  for(int j =0; j < resultArr.size(); j++){
         //do the code you done before from first for loop in here   
  }

输出:

int_dict = { 0              : "String1",
             1              : "String2",
             2              : "String3",
             16             : "String5"   };
#range is first inclusive last exlusif, watch out for that
for i in range(3,15)    :
    int_dict[i] = "String4"

编辑:你也可以使用元组作为键

{0: 'String1',
 1: 'String2',
 2: 'String3',
 3: 'String4',
 4: 'String4',
 5: 'String4',
 6: 'String4',
 7: 'String4',
 8: 'String4',
 9: 'String4',
 10: 'String4',
 11: 'String4',
 12: 'String4',
 13: 'String4',
 14: 'String4',
 16: 'String5'}

输出:

int_dict = { (0,0)              : "String1",
             (1,1)              : "String2",
             (2,2)              : "String3",
              (3,15)             :"String4",
             (16,16)             : "String5"};

def ValueInDict(value):
    for i,j in int_dict.items():
        if value >= i[0]:
            if value <= i[1]:
                print(j)
                return
    print("NOT THERE")

ValueInDict(5)

答案 1 :(得分:0)

嵌套词典怎么样?第一级键是区间的左侧而第二级键是右侧的?

d = {0:{0:"String1"},
...
 3:{15:"String4"},
 16:{16:"String5"}};

答案 2 :(得分:0)

我认为这种罕见的案例有一种特殊的语法。但是,您可以使用一系列键和所需的值创建dict。然后使用int_dict将其添加到update

int_dict = { 0              : "String1",
             1              : "String2",
             2              : "String3",
             16             : "String5"   };
int_dict.update(dict([i, "String4"] for i in range(3,16)))

答案 3 :(得分:0)

用词汇理解:

int_dict = {n:'String{}'.format(n+1) for n in range(0,4)}
int_dict.update({n:'String4' for n in range(3,16)})
int_dict.update({16:'String5'})

答案 4 :(得分:0)

我提出了一个解决方案,我发现更多pythonic:首先创建一个具有不同值的键的字典,然后使用int_dict = { 0: "String1", 1: "String2", 2: "String3", 16: "String5" } int_dict.update(dict.fromkeys(range(3,15), "String4"))

使用字典更新具有相同值的键
{{1}}