我有一个字典和字符串列表如下:
listDict = [{'id':1,'other':2}, {'id':3,'other':4},
{'name':'Some name','other':6}, 'some string']
我想通过点运算符列出字典中的所有id(或其他属性)。所以,从给定的列表中我会得到列表:
listDict.id
[1,3]
listDict.other
[2,4,6]
listDict.name
['Some name']
由于
答案 0 :(得分:4)
python不会这样工作。你必须重新定义你的listDict
。内置列表类型不支持此类访问。更简单的方法就是获得这样的新列表:
>>> ids = [d['id'] for d in listDict if isinstance(d, dict) and 'id' in d]
>>> ids
[1, 3]
P.S。您的数据结构似乎非常异构。如果你解释你想要做什么,可以找到更好的解决方案。
答案 1 :(得分:3)
为此,您需要根据列表创建一个类:
class ListDict(list):
def __init__(self, listofD=None):
if listofD is not None:
for d in listofD:
self.append(d)
def __getattr__(self, attr):
res = []
for d in self:
if attr in d:
res.append(d[attr])
return res
if __name__ == "__main__":
z = ListDict([{'id':1, 'other':2}, {'id':3,'other':4},
{'name':"some name", 'other':6}, 'some string'])
print z.id
print z.other
print z.name