为特定条件嵌套的列表中的多个列表



我正在解决hackerbank中的一个问题,该问题需要使用collections.orderedict((。在这个程序中,我应该接受一堆输入并将其存储在ordereddict中,对重复项的值求和并按顺序表示。因此,在第一部分中,我编写了以下代码,这可能不是问题所在。。

ordi = OrderedDict()
N = int(input())
for i in range(N):
item_info = input().split()
if (len(item_info)>2):
item_name = str(item_info[0]+" "+item_info[1])
price = item_info[-1]
else:
item_name= str(item_info[0])
price = item_info[-1]
if item_name not in ordi:
ordi[item_name]= price
else:
ordi[item_name]=[ordi[item_name]]
ordi[item_name].append(price)
# print(ordi)
Test input given by hackerrank is:
9
BANANA FRIES 12
POTATO CHIPS 30
APPLE JUICE 10
CANDY 5
APPLE JUICE 10
CANDY 5
CANDY 5
CANDY 5
POTATO CHIPS 30

代码的下一部分在字典中循环,并按照的顺序给出输出和

for keys, values in ordi.items():
total = 0
if isinstance(values, list):
print(f"this is what's inside {keys} value ",values)
int_vals = list(map(int, values))
total = sum(int_vals)
print(keys, total)
else:
print(keys,values)

这适用于具有两个措辞字符串的输入,但不适用于一个措辞字符串,即本例中的Candy。现在,为了调试糖果键的值内部,我打印了它的值:

OUTPUT:
BANANA FRIES 12
this is what's inside POTATO CHIPS value  ['30', '30']
POTATO CHIPS 60
this is what's inside APPLE JUICE value  ['10', '10']
APPLE JUICE 20
this is what's inside CANDY value  [[['5', '5'], '5'], '5']

正如你所看到的,在糖果价值的内部,有一个列表中的列表,这是不必要的,我不明白我做错了什么。

这里有一个有效的解决方案:

ordi = OrderedDict()
N = int(input())
for i in range(N):
item_info = input().split()

item_name = " ".join(item_info[:-1])
price = int(item_info[-1])
if item_name not in ordi.keys():
ordi[item_name] = price
else:
ordi[item_name] += price
print(ordi)

输出:

OrderedDict([('BANANA FRIES', 12), ('POTATO CHIPS', 60), ('APPLE JUICE', 20), ('CANDY', 20)])

我在hackerbank中提交了它,它通过了测试,我不知道你的代码有什么问题,但我认为这与你处理向dict添加值的方式有关,这部分:

if item_name not in ordi:
ordi[item_name]= price
else:
ordi[item_name]=[ordi[item_name]]
ordi[item_name].append(price)

我希望我的解决方案能帮助你学习新的

如果你想让你的代码工作,就这样做:

if item_name not in ordi.keys():
ordi[item_name] = list(price)
else:
ordi[item_name].append(price)

这个部分的问题是:[ordi[item_name]]如果项目是一个列表,则将其扭曲到另一个列表中,并且由于";CANDY";key的输入最多,他有问题,并不是因为关键是一个词。当我输入带有大量POTATO CHIPS的自定义输入时,我得到的是:

this is what's inside BANANA FRIES value  ['12', '12']
BANANA FRIES 24
this is what's inside POTATO CHIPS value  [[['30', '30'], '30'], '30']

最新更新