python - 从python中的字典中制作所选项目的数组/列表

标签 python dictionary

需要一些 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}}

我想要的是制作一个两列(或有两个数组)的表格,其中包含学生的姓名和他们各自的英文分数,前提是他们没有任何分数个人简介。(即 Julia 的名字不应出现在列表中)。

是否可以在 python 中优雅地执行此操作? :-/

最佳答案

一个简单的 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)]

关于python - 从python中的字典中制作所选项目的数组/列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18917254/

相关文章:

python - python排序方法中的键如何使用列表

c# - 路径平滑/点减少算法

python - 确定一个字符串是否可以由另一个字符串中的字符子集组成

r - 将 map 函数与 mapproj 库一起使用时包括边界和状态缩写

python - GStreamer:文本覆盖在播放期间不会动态更新

python - smtp错误534连接到gmail python3

python - 统一码编码错误 : 'ascii' codec can't encode characters in position 90-96: ordinal not in range(128)

Python 3 打印不带括号

Java Map<String,String> 数据为空错误

list - Ocaml列表: Implement append and map functions