1

我有一个包含 2 个字典的列表,如下所示:

accuracy=[{'value':1,'key':'apple'}, {'value':2,'key':'orange'}]

我有如下代码:

for fruit in accuracy:
    print fruit

上面的代码将给出以下结果:

{'value':1,'key':'apple'} {'value':2,'key':'orange'}

但我想要这样的东西:

如果我给出name=fruit.key的输出应该name=apple和橙色的情况相同,如果我给出name=fruit.value的输出应该value=1和其他水果的情况相似。我怎样才能做到这一点。我知道上面的代码,即;name=fruit.key不会产生我想要的结果。那么有没有办法得到它?请帮助

4

1 回答 1

5

你可以这样做:

accuracy=[{'value':1,'key':'apple'}, {'value':2,'key':'orange'}]
for fruit in accuracy:
    print 'name={key}'.format(**fruit)
    print 'value={value}'.format(**fruit)

我相信这可以满足您的需求。您可以在此处阅读有关 Python 字符串格式化(str.format()方法)的更多信息:

使用点符号

@mgilson 提到了另一种可能性,它可能更符合您的要求。尽管我认为在这种情况下这是一种矫枉过正(为什么只是为了改变符号?),但它可能对某些人来说很有趣,所以我在下面添加它:

# Here is the special class @mgilson mentioned:
class DotDict(dict):
    def __getattr__(self, attr):
        return self.get(attr, None)
    __setattr__=dict.__setitem__
    __delattr__=dict.__delitem__

accuracy=[{'value':1,'key':'apple'}, {'value':2,'key':'orange'}]    
for fruit in accuracy:
    # Convert dict to DotDict before passing to .format() method:
    print 'name={fruit.key}'.format(fruit=DotDict(fruit))
于 2012-09-21T11:25:23.163 回答