我的代碼只列印串列的第一個元素(活動),因為 0; 但是,當我嘗試時,[:]我得到“串列索引必須是整數或切片,而不是 str”型別錯誤。
我需要在我的串列中列印 140 個元素,但我真的不知道如何修復它。而且我真的不想撰寫另一個代碼,因為這是我可以在幾秒鐘內獲得兩個日期之間差異的唯一方法。
這是我的代碼:
import json
import datetime
import copy
#Read json
with open('/Users/kenyacastellanos/Downloads/data.json') as json_data_file:
data = json.load(json_data_file)
print(data)
#Just show first 10 elements
print("Sin ordenar:",data['activities'][:10])
## Realizamos el ordenamiento por llave, la llave es user_id, creamos una funcion lambda para el ordenamiento
data['activities'].sort(key = lambda x: x['user_id'])
#Just show first 10 elements
print("Ordenamos:", data['activities'][:10])
# Duration
date1 = datetime.datetime.fromisoformat(data['activities'][:]['answered_at'])
date2 = datetime.datetime.fromisoformat(data['activities'][:]['first_seen_at'])
difference_date = (date1-date2)
print("Duration in seconds:", difference_date.seconds, difference_date.microseconds)
這就是我的清單所包含的內容,其中 140 個。在此處輸入圖片說明
"activities":[
{
"id":272961,
"user_id":"izi57ti5",
"answered_at":"2021-09-19T21:09:53.830 00:00",
"first_seen_at":"2021-09-19T21:09:40.830 00:00"
},
{
"id":402616,
"user_id":"izi57ti5",
"answered_at":"2021-09-19T21:10:27.830 00:00",
"first_seen_at":"2021-09-19T21:10:09.830 00:00"
},
{
"id":64828,
"user_id":"izi57ti5",
"answered_at":"2021-09-19T21:13:19.830 00:00",
"first_seen_at":"2021-09-19T21:13:03.830 00:00"
},
{
"id":397256,
"user_id":"izi57ti5",
"answered_at":"2021-09-19T21:18:06.830 00:00",
"first_seen_at":"2021-09-19T21:17:47.830 00:00"
},
{
"id":202872,
"user_id":"izi57ti5",
"answered_at":"2021-09-19T21:19:00.830 00:00",
"first_seen_at":"2021-09-19T21:18:54.830 00:00"
},
{
"id":367396,
"user_id":"izi57ti5",
"answered_at":"2021-09-19T21:23:30.830 00:00",
"first_seen_at":"2021-09-19T21:23:18.830 00:00"
},
{
"id":378117,
"user_id":"izi57ti5",
"answered_at":"2021-09-19T21:25:12.830 00:00",
"first_seen_at":"2021-09-19T21:25:05.830 00:00"
},
{
"id":257362,
"user_id":"izi57ti5",
"answered_at":"2021-09-19T21:30:30.830 00:00",
"first_seen_at":"2021-09-19T21:30:11.830 00:00"
},
{
"id":80097,
"user_id":"izi57ti5",
"answered_at":"2021-09-19T21:34:23.830 00:00",
"first_seen_at":"2021-09-19T21:34:13.830 00:00"
},
uj5u.com熱心網友回復:
您遇到了麻煩,因為 回傳的資料型別data['activities'][0]與data['activities'][:].
data['activities'][0] 回傳串列中的第一個字典:
{
"id":272961,
"user_id":"izi57ti5",
"answered_at":"2021-09-19T21:09:53.830 00:00",
"first_seen_at":"2021-09-19T21:09:40.830 00:00"
}
另一方面,串列的任何子集,包括data['activities'][:10]或data['activities'][:],回傳一個串列:
>>> data['activities'][:]
[
{
"id":272961,
"user_id":"izi57ti5",
"answered_at":"2021-09-19T21:09:53.830 00:00",
"first_seen_at":"2021-09-19T21:09:40.830 00:00"
},
{
"id":402616,
"user_id":"izi57ti5",
"answered_at":"2021-09-19T21:10:27.830 00:00",
"first_seen_at":"2021-09-19T21:10:09.830 00:00"
},
...
]
你對這個結果所做的是嘗試'answered_at'從字典中訪問該專案。在第一種情況下,這可以正常作業:
>>> data['activities'][0]['answered_at']
"2021-09-19T21:09:53.830 00:00"
但是第二個會產生一個 TypeError,表明您不能使用字串鍵訪問串列的元素,這是真的。
相反,您必須決定如何修改您的作業流程以處理串列中的許多專案。例如,您可以使用回圈:
for entry in data['activities']:
# entry now points to the dictionaries within the list
date1 = datetime.datetime.fromisoformat(entry['answered_at'])
date2 = datetime.datetime.fromisoformat(entry['first_seen_at'])
difference_date = (date1-date2)
# this will print out once for every element in data['activities']
print(
"Duration in seconds:",
difference_date.seconds,
difference_date.microseconds,
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/322331.html
