所以我刚刚开始使用谷歌日历api,到目前为止我已经取得了不错的成绩。我将参与者的姓名和电子邮件添加到events
字典中,就像这样
events = {
# other stuff here and then this
'items': [
# lots of stuff here, followed by
'attendees': [
{
'email': email1,
'displayName': name1
},
{
'email': email2,
'displayName': name2
},
],
###
]
}
添加它们很好,但是当我访问它们时,我从未保证它们的顺序。我以为我可以像这样访问电子邮件
for event in events['items']:
print "email1 = " + str(event['attendees'][0]['email'])
print "email2 = " + str(event['attendees'][1]['email'])
我可以。我已经在python always have their order preserved中学习了这个列表,这很方便,因为我想用列表的索引访问列表中的字典。但我所学到的是,有时0
索引引用email1
,有时引用email2
。为什么不一致?这是谷歌日历api固有的还是有一些关于在python列表中放置字典对象放松订单保存假设?或者是我缺少的其他东西?
答案 0 :(得分:0)
因此,正如@Colonel Thirty Two指出的那样,虽然列表保留了顺序,但谷歌如何将数据返回到列表中的顺序可能与提交给它们的顺序不同。如果您希望依靠该订单来检索与会者
之类的订单,那么此订单与参加者的不一致是不方便的for event in events['items']:
print "email1 = " + str(event['attendees'][0]['email'])
print "email2 = " + str(event['attendees'][1]['email'])
更重要的是,谷歌日历api可写的字段很少。然而,可写的是comments
。因此,我在该字段中添加了一个值,以使与会者可识别。像这样
'attendees': [
{
'email': agent_email,
'displayName': agent_name,
'comment': 'agent'
},
{
'email': event_attendee_email,
'displayName': event_attendee_name,
'comment': 'client'
},
使用comment
作为标识符有助于我使用简单的if语句检索每位与会者的email
和displayName
。
for i in range(len(event['attendees'])):
if event['attendees'][i]['comment'] == 'client':
event['attendees'][i]['displayName'] = event_attendee_name
event['attendees'][i]['email'] = event_attendee_email
现在谷歌日历api以与我添加的顺序不同的顺序将我的与会者提交给我并不重要。我现在可以检索与会者,以便我可以更改它们。问题解决了。