我有一个这样格式化的字典(它缺少值,obv):
{'expand': ,
'issues': [{'expand': ,
'fields': {'created': ,
'issuetype': {'avatarId': ,
'description': ,
'iconUrl': ,
'id': ,
'name': ,
'self': ,
'subtask': },
'priority': {'iconUrl': ,
'id': ,
'name': ,
'self': },
'project': {'avatarUrls': {'16x16': ,
'24x24': ,
'32x32': ,
'48x48': },
'id': ,
'key': ,
'name': ,
'projectCategory': {'description': ,
'id': ,
'name': ,
'self': },
'projectTypeKey': ,
'self': },
'status': {'description': ,
'iconUrl': ,
'id': ,
'name': ,
'self': ,
'statusCategory': {'colorName': ,
'id': ,
'key': ,
'name': ,
'self': }}},
'id': ,
----> 'key': ,
'cccc': },
我需要访问该键为“ key”的所有值。
jira_key = dict["issues"][0]["key"]
这抓住了第一个的钥匙,但是我需要大约60+。我已经尝试过各种发现的事情,但似乎没有成功。
注意:不是开发人员:)
答案 0 :(得分:-1)
一如既往,有多种方法可以解决问题。
其中一种方法是假设您需要的JIRA密钥仅是发布密钥,而不是project或projectCategory密钥,是使用itemgetter
:
from operator import itemgetter as itg
key_finder = itg('key')
my_values = list(map(key_finder, DICT_NAME['issues']))
itemgetter
用作理解的包装器,并实质上返回tuple(obj[i] for i in items)
,其中items
是传递到itemgetter
的参数的集合。因此,itemgetter('key', 'id')
将对'key'
和'id'
进行换行,并且应用于字典的函数将返回其'key'
和'id'
的值,仅在这种情况下需要'key'
。
map(function, iterable)
依次将function
应用于可迭代的项目,例如function(iterable[0]); function(iterable[1])
等
在您的情况下,必须循环多次并合并结果:
from functools import reduce
issue_key_values = reduce(lambda x,y: x+y, [list(map(key_finder, ll['issues'])) for ll in jira_list])
reduce运算符,来自其文档字符串:
将两个参数的函数累计应用于序列的各项, 从左到右,以便将序列减少为单个值。
其他步骤是评估生成器表达式和循环理解,您可以在此站点(和Google)周围找到大量资料。