如果我在dict中没有相似的名字,我可以采取什么方法?

时间:2012-02-06 16:45:41

标签: python

我在软件设计方面没有太多经验,所以我不确定程序员通常如何解决这类问题。我基本上创建了一些值并将它们存储在dict中,但这些名称并不是唯一的。我知道它不可能在dicts中存储相同的键名,但软件使者如何解决这个问题(我确定我不是第一个面对这个问题的人)?

我认为一些代码会让它更容易理解(两个列表,一个动物和水果,然后在两者之间生成一个随机值。我正在试图弄清楚如何存储这些数据,以便我可以使用它后):

lista = ['dog', 'cat', 'elephant', 'pig', 'bear']
listb = ['apple', 'pear']

dict_of_lists_values = {}
for list_a in lista:
    for list_b in listb:
        #print list_a, list_b
        #print lista.index(list_a), listb.index(list_b), lista.index(list_a) *  listb.index(list_b)
        dict_of_lists_values[list_a] = [lista.index(list_a) *  listb.index(list_b), list_b]

for lists_data in dict_of_lists_values:
    print lists_data, ' holds ', dict_of_lists_values[lists_data]

您会看到最终结果是:

elephant  holds  [2, 'pear']
pig  holds  [3, 'pear']
dog  holds  [0, 'pear']
bear  holds  [4, 'pear']
cat  holds  [1, 'pear']

这是完全有道理的,因为它覆盖了以前的结果(在列表列表中包含apple而不是梨)。如果我想存储所有10个结果而不仅仅是唯一的5?

,我该如何重新设计呢?

提前感谢。

3 个答案:

答案 0 :(得分:1)

如果同一个名字用于识别不同的东西,那么必须有其他一些方法来区分,比如3种不同的猪:用这个作为你的钥匙。

答案 1 :(得分:1)

您可以使用组合键。例如,您可以使用每个列表中元素的元组作为键,这样您就可以:

dict_of_lists_values[(list_a, list_b)] = lista.index(list_a) *  listb.index(list_b)

然后获得相同的输出:

for lists_data in dict_of_lists_values:
    print lists_data[0], ' holds ', dict_of_lists_values[lists_data], lists_data[1]

答案 2 :(得分:1)

看起来你正试图为每只动物建立一种库存模型,对吧?不是直接指定一对[count,fruit]作为值,而是用空字典初始化每只动物并将每只动物的库存存储在那里:

bigdict = { }  # was: dict_of_lists_values
for a in lista:
    bigdict[a] = { }

for a in lista:
    for b in listb:
        lista[a][b] = lista.index(a) *  listb.index(b) # or whatever