如何访问嵌套字典中的特定键?

时间:2020-09-29 16:46:52

标签: python dictionary nested

 itemdetails = {101: { 'Item Name':'Tshirt', 'Price':150.00, 'Stock':20},
                102: { 'Item Name':'Shirt', 'Price':300.00, 'Stock':20},
                103: { 'Item Name':'Shorts', 'Price':450.00, 'Stock':20},
                104: { 'Item Name':'Trousers', 'Price':750.00, 'Stock':20}}


 option = str(input("Press [C] for Item Code , [N] for Item Name: "))
 if option=='n':
         itemname=(input("Enter Item name: "))
         print(itemdetails[itemname]) #====> how to access ???
 else:
         itemcode=int(input("Enter Item code: "))

         print(itemdetails[itemcode])

##输入项目名称时,我希望它列出该特定项目名称的整个子目录,例如,如果输入Tshirt,我想输出=====> 101:{'Item Name':'Tshirt','Price':150.00,'Stock':20}

有可能吗?

4 个答案:

答案 0 :(得分:0)

尝试一下:

item = 'Tshirt'
print([{k:v} for k,v in itemdetails.items() if v['Item Name'] == item][0])

输出

{101: {'Item Name': 'Tshirt', 'Price': 150.0, 'Stock': 20}}

-要打印小数点后两位的价格,您需要从字典中提取值并打印出来。

item = 'Tshirt'
x =[{k:v} for k,v in itemdetails.items() if v['Item Name'] == item][0]
print(x)
price = [v for v in x.values()][0]['Price']
print('Price: {:.2f}'.format(price))

输出

{101: {'Item Name': 'Tshirt', 'Price': 150.0, 'Stock': 20}}
Price: 150.00

答案 1 :(得分:0)

如果仅需通过itemname作为键来访问信息,则可能可以考虑更改dict结构并直接将itemname用作外键。 但是,如果无法完成,则可以创建一个单独的字典,为每个项目名称存储ID列表编号。然后,只需选择商品名称的ID,然后从原始列表中获取所需的信息即可。否则,您将必须遍历主词典中的所有键,检查其中是否有项名作为键,然后返回其内容。

答案 2 :(得分:0)

您可以这样做:

itemdetails = {101: { 'Item Name':'Tshirt', 'Price':150.00, 'Stock':20},
                102: { 'Item Name':'Shirt', 'Price':300.00, 'Stock':20},
                103: { 'Item Name':'Shorts', 'Price':450.00, 'Stock':20},
                104: { 'Item Name':'Trousers', 'Price':750.00, 'Stock':20}}


 option = str(input("Press [C] for Item Code , [N] for Item Name: "))
 if option=='n':
         itemname=(input("Enter Item name: "))
         print(list(filter(lambda item: item['Item Name'] == itemname, itemdetails))[0])
 else:
         itemcode=int(input("Enter Item code: "))

         print(itemdetails[itemcode])

答案 3 :(得分:0)

我认为dict理解将在这里完成工作,就像这样:

itemdetails = {101: { 'Item Name':'Tshirt', 'Price':150.00, 'Stock':20},
                102: { 'Item Name':'Shirt', 'Price':300.00, 'Stock':20},
                103: { 'Item Name':'Shorts', 'Price':450.00, 'Stock':20},
                104: { 'Item Name':'Trousers', 'Price':750.00, 'Stock':20}}
in_val = 'Shorts'       
out = {key:val for key,val in itemdetails.items() if val['Item Name']==in_val}

print(out)

输出:

{103: {'Item Name': 'Shorts', 'Price': 450.0, 'Stock': 20}}

其中in_val是项目Name field的值,将其更改为您想要的任何内容。

不确定要使用的垂直格式,但是这种格式可能可以完成我希望的工作:

第一个版本-mor'fancy'一个:

print('\n'.join([str(list(a.keys())[0])] + [str(item) for item in a[103].items()]))

输出:

103
('Item Name', 'Shorts')
('Price', 450.0)
('Stock', 20)

第二个版本-更具可读性(并且更容易根据需要进行微调):

for outer_key,outer_vals in a.items():
    print(f'outer key: {outer_key}')
    for inner_key,inner_val in outer_vals.items():
        print(f'inner_key: {inner_key}, inner_val: {inner_val}')

输出:

outer key: 103
inner_key: Item Name, inner_val: Shorts
inner_key: Price, inner_val: 450.0
inner_key: Stock, inner_val: 20