我在软件设计方面没有太多经验,所以我不确定程序员通常如何解决这类问题。我基本上创建了一些值并将它们存储在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?
,我该如何重新设计呢?提前感谢。
答案 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