在两个词典中使用相同的键(Python)

时间:2013-08-15 02:44:20

标签: python hash dictionary key

这就是我所拥有的:

from pprint import pprint

Names = {}
Prices = {}
Exposure = {}

def AddName():
    company_name = input("Please enter company name: ")
    return company_name

def AddSymbol(company_name):
    stock_symbol = input("Please enter a stock symbol: ")
    Names[stock_symbol] = company_name
    return Names

^^这会将名称字典更新为{symbol:company name}

def AddPrices(stock_symbol):
    buy = float(input("Please enter buying price of stock: "))
    sell = float(input("Please enter current price of stock: "))
    Prices[stock_symbol] = buy, sell
    return Prices

^^这会产生一个TypeError:unhashable类型:'dict' - 我想要的是更新价格字典,如{符号:买价,卖价,符号2:买价,卖价等}}

def printDicts(Names, Prices):
    '''
    For debug purposes, prints out contents of dictionaries
    '''
    print( "Names is now:" )
    pprint(Names)

    print("Prices now:")
    pprint(Prices)



def main():
    company_name = AddName()
    stock_symbol = AddSymbol(company_name)
    AddPrices(stock_symbol)
    printDicts(Names, Prices)

main()

对编程不熟悉我不完全确定如何解决这个问题。谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

您的AddSymbol会返回Names,这是字典。字典不能用作字典键。

只需在return stock_symbol中使用AddSymbol

答案 1 :(得分:1)

AddSymbol(company_name)中,您将返回整个Names字典。然后将整个字典传递到AddPrices函数中。 AddPrices意味着将一个股票代码传递给它(str),但您传递的是dict。您可以修改AddSymbol以返回stock_symbol而不是Names

我还建议您的函数名称是驼峰式的,以小写字母开头,并将每个单词的首字母大写。这是大多数程序员为保持一致性而做的事情,并且养成良好的习惯是好的。

答案 2 :(得分:0)

也许您在AddSymbol函数中返回的意思是符号而不是另一个字典?在这种情况下,您可以:

def AddSymbol(company_name):
    stock_symbol = input("Please enter a stock symbol: ")
    Names[stock_symbol] = company_name
    return stock_symbol