我正在尝试使用具有两个部分k1和k2的键来创建字典字典。 k1是实际键,k2是dict [k1,k2]的长度。在下面的示例中,k1是“ cat”,k2是10。k2只是值列表的大小,对键的唯一性没有贡献。

dict = {
        cat, 10: [value1, value2, value3, ..., value10],
        dog, 15: [value1, value2, value3, ..., value15],
        zen, 15: [value1, value2, value3, ..., value15]
       }


我所做的是,在没有k2的情况下实现了该字典,然后将k1和k2连接起来,这意味着密钥实际上是k1k2,从而导致了以下实现。

if key not in dict:
  dict[key] = [value1]
else:
  if value_n not in dict[key]:
    dict[key].append(value_n)

for key in dict:
  key = key + str(len(dict[key]))


现在,字典像这样显示。

dict = {
        cat10: [value1, value2, value3, ..., value10],
        dog15: [value1, value2, value3, ..., value15],
        zen15: [value1, value2, value3, ..., value15]
       }


由于我不想将k2存储在单独的数据结构中,如何在字典中实现多部分键?

最佳答案

不确定确切的用例是什么。但是在我看来,您可以选择以下几种方法之一。而这取决于“长度”键(k2)是创建列表的原因,还是仅仅是它的指示符。



您可以使用嵌套字典:

dict = {
        'cat' : {10: [value1, value2, value3, ..., value10]},
        'dog' : {15: [value1, value2, value3, ..., value15]},
        'zen' : {15: [value1, value2, value3, ..., value15]}
       }


因此,访问将为dict['cat'][10],并且如果“长度”(k2)仅是长度的指示符,则此访问有效。



您可以创建一个自定义类,该类将允许您访问“键”并指定您希望该值的长度。该类中的方法将类似于:

def method(self, key, length):
    return self.__dict__[key][:length]




您可以使用元组作为密钥:

dict = {
        ('cat', 10) : [value1, value2, value3, ..., value10],
        ('dog', 15) : [value1, value2, value3, ..., value15],
        ('zen', 15) : [value1, value2, value3, ..., value15]
       }

关于python - 用多部分键构造字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16334058/

10-12 16:46