python - 我有一个输入文件,我正在尝试从中构建字典

标签 python database python-3.x dictionary

我有一个输入文件,我正试图从中构建数据库。
每一行看起来像这样:

Amy Shchumer, Trainwreck, I Feel Pretty, Snatched, Inside Amy Shchumer  
Bill Hader,Inside Out,  Trainwreck, Tropic Thunder 

等等。
第一个字符串是 Actor \女 Actor ,然后是他们出演的电影。
数据未排序,它们是一些尾随空格。

我想创建一个如下所示的字典:
{'Trainwreck': {'Amy Shchumer', 'Bill Hader'}}
键是电影,值应该是其中的 Actor ,统一在一组数据类型中。

def create_db():
   my_dict = {}
   raw_data = open('database.txt','r+') 
   for line in raw_data:
      lst1 = line.split(",") //to split by the commas 
      len_row = len(lst1)
      lst2 = list(lst1) 
      for j in range(1,len_row):
         my_dict[lst2[j]] = set([lst2[0]])
print(my_dict)

它不起作用...它没有解决当 key 已经存在时应该将 actor 与前一个 actor 统一在一个集合中的问题

相反,我最终得到:
'Trainwreck':{'Amy Shchumer'},'Inside Out':{'Bill Hader'}

最佳答案

def create_db():
    db = {}
    with open("database.txt") as data:
        for line in data.readlines():
            person, *movies = line.split(",")
            for m in movies:
                m = m.strip()
                db[m] = db.get(m, []) + [person]

    return db

输出:

{'Trainwreck': ['Amy Shchumer', 'Bill Hader'], 
 'I Feel Pretty': ['Amy Shchumer'], 
 'Snatched': ['Amy Shchumer'], 
 'Inside Amy Shchumer': ['Amy Shchumer'], 
 'Inside Out': ['Bill Hader'], 
 'Tropic Thunder': ['Bill Hader']}

这将循环遍历数据并将每一行的第一个值分配给 person,其余的分配给 movies(参见 here 以了解如何 * 解包元组)。然后对于所有电影,它使用 .get检查它是否在数据库中,如果是则返回列表,如果不是则返回空列表。然后它将新 Actor 添加到列表中。

另一种方法是使用 defaultdict :

from collections import defaultdict

def create_db():
    db = defaultdict(lambda: [])
    with open("database.txt") as data:
        for line in data.readlines():
            person, *movies = line.split(",")
            for m in movies:
                db[m.strip()].append(person)

    return db

如果 key 不存在,它会自动分配 []

关于python - 我有一个输入文件,我正在尝试从中构建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54154866/

相关文章:

python - 值错误 : operands could not be broadcast together with shapes - inverse_transform- Python

r - 如何通过R中的条件对特定列执行log10转换

mysql - 我需要在我的存储过程中执行 varchar SQLcode

python - Python 给函数参数赋值的过程是怎样的?

python - 如何确定多个 python 二进制文件是否指向同一个安装

python - Python 中方法之间的区别

python - 如何在 Flask 中将数据写入文本文件?

php - 是否可能返回类似 Excel 的查询?

python - 在python 3中连接文件

python - 在python3中找到一个字符串中有一个表情符号