我有一个字典,它有许多不同的会话,在不同的日期时间开始和结束。每个会话桶有多个结果,每个结果都有一个时间戳。
每个结果都可以是错误或不是。
我想收集所有会话的数据来回答这个问题:错误是在会话结束时更频繁还是在会话开始时更频繁。
这是那本字典的一小部分
"aggregations": {
"Sessioncount": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "1dec8193-1bf8-4ba1-ade0-332a53ca01e8",
"doc_count": 116,
"SessionTimestamps": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": [
"None",
"2022-11-09T12:29:18.489Z"
],
"key_as_string": "None|2022-11-09T12:29:18.489Z",
"doc_count": 1
},
{
"key": [
"None",
"2022-11-09T12:29:18.618Z"
],
"key_as_string": "None|2022-11-09T12:29:18.618Z",
"doc_count": 1
这个会话有很多条目,我们在这里看到的两个没有返回错误码。还有50多场比赛。
欢迎任何提示或帮助。
我的主要问题是我真的想不出一种遍历字典并为每个会话获取数据的方法。
我正在使用Python
我可以直接到第一个"桶";
df = pd.json_normalize(resp["aggregations"]
["Sessioncount"]["buckets"])
如果我试着像这样更进一步:
df = pd.json_normalize(resp["aggregations"]
["Sessioncount"]["buckets"]["SessionTimestamps"])
我得到一个错误:&;列表索引必须是整数或切片,而不是字符串&;
你如何回答这个问题:错误主要出现在每个会话的前半段还是后半段?
目标"bucket "在对象"聚合"中不是一个字典但是一个列表.
当前问题的答案
buckets = resp["aggregations"]["Sessioncount"]["buckets"][0]
sessionTimestamps = buckets["SessionTimestamps"]
df = pd.json_normalize(sessionTimestamps)
为什么会出现问题?
"aggregations": {}
是字典,"Sessioncount": {}
也是字典。您可以使用.get('child')
函数或经典['child']
选择器在这些字典中导航:
例如:
dictionary = { "child_1": 0, "child_2": 1 }
print(dictionary.get('child_1'), dictionary['child_2'])
=============== RESTART: main.py ===============
0 1
当你浏览字典时,你偶然发现了"buckets": [{}]
,这是一个列表包含字典
list = [ "a", "b", "c" ]
print(list[0], list[1], list[2])
=============== RESTART: main.py ===============
a b c
我们要访问字典"SessionTimestamps": {}
,它位于"buckets": [{ "SessionTimestamps": {} }]
列表的第一个字典中。。问题是你必须使用"索引"访问列表的子节点。
因此错误"TypeError: list indices must be integers or slices, not str"
更多信息,请访问geeksforgeeks关于Python中List和Dictionary的区别的简洁教程
我希望这对你有帮助:)