需要一些python词典的指导,如果可以请帮助..
我有一本看起来像的字典(它有100个名字,但我给你看样品):
{'John':{'Maths':40,
'Eng':50,
'Phy':67,
'Chem':78}
'Kate':{'Maths':98,
'Chem':83}
'Julia':{'Phy':76,
'Eng':67,
'Maths':56,
'Bio':78}
'Sam':{'Phy':23,
'Eng':67,
'Chem':98,
'Maths':56}}
我想要的是是制作一个包含学生姓名及其各自英文标记的两列(或两个数组)的表格,如果他们没有任何标记Bio。(即Julia的名字不应该在列表中)。
在python中可以优雅地完成这项工作吗? : - /
答案 0 :(得分:2)
这使用列表理解来完成工作,随意考虑它优雅:
h = {'John': {'Maths': 40, 'Eng':50, 'Phy': 67, 'Chem': 78},
'Kate': {'Maths': 98, 'Chem': 83},
'Julia': {'Phy': 76, 'Eng': 67, 'Maths': 56, 'Bio': 78},
'Sam': {'Phy': 23, 'Eng': 67, 'Chem': 98, 'Maths': 56}}
print [(k, v.get('Eng')) for k, v in h.iteritems() if 'Bio' not in v]
输出:
[('Sam', 67), ('John', 50), ('Kate', None)]
在print
循环中使用for
将其格式化为表格。
答案 1 :(得分:2)
一个简单的for
循环和一些字符串格式化(since we already have a list comprehension):
data = {'John': {'Maths': 40, 'Eng':50, 'Phy': 67, 'Chem': 78},
'Kate': {'Maths': 98, 'Chem': 83},
'Julia': {'Phy': 76, 'Eng': 67, 'Maths': 56, 'Bio': 78},
'Sam': {'Phy': 23, 'Eng': 67, 'Chem': 98, 'Maths': 56}}
print "name\tmark\n------------"
for name, marks in data.iteritems():
if not 'Bio' in marks:
print "{name}\t{mark}".format(name=name, mark=marks.get('Eng', '---'))
<强>输出:强>
name mark
------------
Sam 67
John 50
Kate ---
回应你的评论:
使用zip
- 功能:
zip(*[(k,v['Eng']) for k,v in data.iteritems() if not 'Bio' in v and 'Eng' in v])
结果
[('Sam', 'John'), (67, 50)]