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



我在软件设计方面还没有太多经验,所以我不确定程序员通常是如何解决这类问题的。我基本上是在创建一些值并将它们存储在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而不是pear)。如果我想存储所有10个结果,而不仅仅是唯一的5个结果,我该如何重新设计它?

提前谢谢。

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

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]

如果同一个名字是用来识别不同的东西,那么必须有其他方法来区分,比如说,三个不同的猪:用THAT作为你的键。

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

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

相关内容

最新更新