Python 从由分号分隔的键值对文件生成字典

Python 从由分号分隔的键值对文件生成字典,python,Python,我正在以以下格式从文件导入一些数据: username:password;username1:password1;username2:password2; 我需要将其导入字典,并设置key=username和value=password等 到目前为止,我得到的是: with open('file.txt') as f: password_list = dict(x.strip(":").split(";", 1) for x in f) for user, password in

我正在以以下格式从文件导入一些数据:

username:password;username1:password1;username2:password2;
我需要将其导入字典,并设置
key=username
value=password

到目前为止,我得到的是:

with open('file.txt') as f:
    password_list = dict(x.strip(":").split(";", 1) for x in f)


for user, password in password_list.items():
    print(user + " - " + password)

结果显示为
username:password-username1:password1
。所以我需要再次拆分它们。有什么提示吗?

您需要对拆分操作进行层次化:

s = "username:password;username1:password1;username2:password2"

d = dict(v.split(":") for v in s.split(";"))

print(d)
结果:

{'username2': 'password2', 'username': 'password', 'username1': 'password1'}
对于多行文件,只需再添加一个循环:

d = dict(v.split(":") for s in f for v in s.strip().split(";"))
值得补充的是:

  • 如果密码包含
    ,则这种格式是短期的
    。使用
    csv
    模块和正确的报价可以解决这个问题
  • 忽略重复的用户名:由于字典键的唯一性,只考虑最后一个条目
  • dict(v.split(“:”)
    construct是在不理解词典的情况下创建词典的旧方法,在这里特别有用,因为
    split
    返回一个正好包含2个值(键/值)的
    列表

您可以首先在
“;”
字符上拆分,对于每个检索到的值,可以在
“:”
字符上拆分

假设输入定义为

input = "username:password;username1:password1;username2:password2;"
我们可以用这个来创建字典

dict([entry.split(":", 1) for entry in input.split(";") if entry])
解释 首先,我们对每个
username:password
条目进行拆分

[entry for entry in input.split(";")]
然后检查是否没有空条目

[entry for entry in input.split(";") if entry]
然后我们在第一个
:“
字符上拆分每个条目

[entry.split(":", 1) for entry in input.split(";") if entry]
最后我们把它放进字典里

dict([entry.split(":", 1) for entry in input.split(";") if entry])

添加另一个for循环?所以基本上你的文件只有一行?是的,先生。一行包含数千个用户名和密码值。试图让用户成为密钥,让密码成为值,这样我就可以对他们进行操作,比如查找重复项等,这些操作可以在这样的列表中工作,但不能在字典中读取文件非常好,如果我们使用
dict
而不是字典理解,我们可以使用一个表达式同时指定键和值,该表达式耦合
键和值
,例如
split(“:”)
不知道,ty@HannaL. 您可以先以
str
的形式读取文件,也可以直接在
f.read().split(“;”)
上读取文件,因为您说过该文件只有一行。
对于文件中的行
给出了带有尾随新行的字符串,可能不想在最后一个密码中包含它们,因此在第二个代码段中使用
s.strip()