我有一个csv文件,其中包含名称和电话号码。我只有在拥有电话号码的情况下才对名称感兴趣。
with open(phone_numbers) as f:
reader = csv.DictReader(f)
names = [record['Name'] for record in reader if record['phone']]
但是我也想要各自的电话号码,我已经尝试过了:
user_data = {}
with open(phone_numbers) as f:
reader = csv.DictReader(f)
user_data['Name'] = [record['Name'] for record in reader if record['phone']]
user_data['phone'] = [record['phone'] for record in reader if record['phone']]
但是对于第二个项目,我有一个空字符串,我猜这record
是一个生成器,这就是为什么我可以对其进行两次迭代的原因。
我尝试使用元组,但仅以这种方式工作:
user_data = {}
with open(phone_numbers) as f:
reader = csv.DictReader(f)
user_data['Name'] = [(record['Name'],record['phone']) for record in reader if record['phone']]
在那种情况下,我有两个变量,phone
并Name
存储在中user_data['Name']
,这不是我想要的。
如果我尝试这样做:
user_data = {}
with open(phone_numbers) as f:
reader = csv.DictReader(f)
user_data['Name'],user_data['phone'] = [(record['Name'],record['phone']) for record in reader if record['phone']]
我收到以下错误:
ValueError: too many values to unpack
编辑:
这是表的示例:
+ -------- + --------------- +
| 电话| 编号|
+ -------- + --------------- +
| 路易斯| 000 111 22222 |
+ -------- + --------------- +
| 保罗| 000 222 3333 |
+ -------- + --------------- +
| 安德里亚| |
+ -------- + --------------- +
| 豪尔赫| 111 222 3333 |
+ -------- + --------------- +
因此,所有行都具有名称,但并非所有行都具有电话。
您可以dict
用来将元组列表转换为字典。get
如果您的记录没有phone
价值,也需要使用。
import csv
user_data = {}
with open(phone_numbers) as f:
reader = csv.DictReader(f)
user_data = dict([(record['Name'], record['phone']) for record in reader if record.get('phone').strip())
如果要分别列出name
s和phone
s,则可以使用*
表达式
with open(phone_numbers) as f:
reader = csv.DictReader(f)
names, phones = zip(*[(record['name'], record['value']) for record in reader if record.get('phone').strip()])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句