【问题标题】:How can i output more than one identical line from a csv file in python [duplicate]如何从python中的csv文件中输出多个相同的行[重复]
【发布时间】:2021-09-28 16:18:03
【问题描述】:

我一直在尝试制作一个外卖目录,让您可以按食物类型、评级、成本等进行搜索。

我在打印多行时遇到了一些麻烦。 如果我要搜索比萨,天堂之片会像这样出现:

-Slice of Heaven,Pizza,4.1/5,01904 731377,

但我的目标是:

-Slice of Heaven,Pizza,4.1/5,01904 731377
-Salt and Pepper,Pizza,3.0/5,01904 733733
-Bodrum Pizza,Pizza,3.3/5,01904 673300
-Dominoes Pizza,Pizza,3.6/5,01904 690000

csv 文件如下所示:

Name,Type of food,Rating,Phone Number,,,
Fish King Takeaway ,Fish and Chips/Chinese ,3.9/5,01904 659775,,,
Heworth Chinese ,Chinese,3.9/5,01904 415163,,,
Clifton Chinese,Chinese,2.8/5,01904 655025,,,
Jaipur Spice,Curry,4.1/5,01904 673550,,,
Lukes Takeaway,Pizza,4.7/5,01904 610011,,,
Efes Pizza,Pizza,3.6/5,01904 652210,,,
Jorvik Spice,Curry,4.3/5,01904 624040,,,
Lucky Dragon ,Chinese,3.0/5,01904 782002,,,
Salt and Pepper,Pizza,3.0/5,01904 733733,,,
Bodrum Pizza,Pizza,3.3/5,01904 673300,,,
Dominoes Pizza,Pizza,3.6/5,01904 690000,,,
Slice of Heaven,Pizza,4.1/5,01904 731377,,,

这是我的代码:

import csv
import random
    
f = open('Takeaway finder/Takeaway.csv', 'r')
reader = csv.reader(f)
takeaway = {}

for row in reader:
    takeaway[row[1]] = {'Name' :row[0],'Rating': row[2], 'Phone Number': row[3]}

choice = input("what do you fancy tonight?")

print(takeaway[choice])

【问题讨论】:

  • takeaway 只保存它看到的每个类别的最后一行...您应该将其保存为列表。但是如果可能的话,在pandas中处理这些事情会容易得多

标签: python


【解决方案1】:

您可以使用iteritems

dict((key,value) for key, value in takeaway.iteritems() if key == choice)

【讨论】:

  • 你能解释一下这个答案吗? takeaway 是结果字典。如何迭代它以创建它?
【解决方案2】:

我认为当您为外卖字典分配唯一值时,我们的问题就出现了。

如果你有,例如两行,如下所示:

AAAA, Pizza, 9, 99999999
BBBB, Pizza, 10, 999999998

首先它会做takeaway[Pizza] = AAAA, 9, 99999999 当它遇到第二行时,它将覆盖上一行。 (这似乎不是理想的行为)

可能的解决方案:您可以追加它们,而不是设置外卖[pizza] 的值。简单地改变:

takeaway[row[1]] = {'Name' :row[0],'Rating': row[2], 'Phone Number': row[3]}

takeaway[row[1]].append({'Name' :row[0],'Rating': row[2], 'Phone Number': row[3]})

注意:请注意 Python 中的默认 dict 对象不允许此类操作(您不能附加到空对象)。因此,您可以通过这种方式使用库集合:

from collections import defaultdict
takeaway = defaultdict(list) #Each entry of the takeaway dict is now an empty list
takeaway[key].append(dictionary_with_data) #Now you can append the dictionaries to this empty list

【讨论】:

    【解决方案3】:

    问题与您的 CSV 文件无关;问题是您将其读入dict,其中每个类别仅保存一个提供者。

    显而易见的解决方案是让dict 存储每个类别的提供者列表。一种常见的安排是使用defaultdict,这样您就不必单独检查当前密钥是否已经存在。

    import csv
    # import random  # unused import
    from collections import defaultdict
    
    takeaway = defaultdict(list)
    
    with open('Takeaway finder/Takeaway.csv', 'r') as f:
        for row in csv.reader(f):
            takeaway[row[1]].append({'Name' :row[0],'Rating': row[2], 'Phone Number': row[3]})
    
    choice = input("what do you fancy tonight?")
    
    print(takeaway[choice])
    

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 2019-05-22
      • 2021-04-30
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多