亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 python dict 中添加新的鍵值對

在 python dict 中添加新的鍵值對

蠱毒傳說 2022-05-19 14:20:46
我在嘗試在 python 字典中添加新的鍵值對同時保留以前的鍵值對時遇到問題。我正在MongoDB用作數據庫。我的示例響應是"field1" : "a","field2" : "b","field3" : "c","history" : {    "2019-09-03 00:00:00" : "state1"}預期的反應是"field1" : "a","field2" : "b","field3" : "c","history" : {    "2019-09-01 00:00:00" : "state1"    "2019-09-02 00:00:00" : "state1"    "2019-09-03 00:00:00" : "state1"}我想在歷史記錄中添加鍵值對,鍵是日期,值是狀態,但問題是我的代碼刪除了以前的鍵值對,然后添加了一個新的鍵值對。我正在使用mongo client在 MongoDB 數據中保存記錄。這是我的代碼out = dict()history = dict()out['field1'] = 'a'out['filed2'] = 'b'out['field3'] = 'c'history[str(datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0))] = 'state1'out_handle.update_one(                    {'field1': a, 'field2': 'b', 'field3': 'c'},                    {'$set': out}},                    upsert=True                )
查看完整描述

2 回答

?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

看起來您希望通過三個字段進行查詢{'field1': a, 'field2': 'b', 'field3': 'c'},然后只需添加一條歷史記錄。與$push操作員一起這樣做。注意第二個參數update_one可以有$push和$set和$unset運算符。


coll.update_one({'field1': a, 'field2': 'b', 'field3': 'c'}, {

        "$push": {"history":{"D2":"S3"}},

        "$set": {"otherField1": "hello", "otherField2": "goodbye"}

        }, upsert=True)


但 我強烈建議您不要將日期用作鍵,而應將其用作值,并用作真正的日期時間值,而不是字符串。當日期查詢是值而不是鍵時,處理日期查詢要容易得多,例如


rec = {

    "date": datetime.datetime.now(),

    "state": "state1"  # or whatever

}

coll.update_one({'field1': a, 'field2': 'b', 'field3': 'c'}, {"$push": {"history":rec}} )

這會產生類似的東西:


{

    "field1" : "a",

    "field2" : "b",

    "field3" : "c",

    "history" : [

        {

            "date" : ISODate("2019-09-03T07:54:38.144Z"),

            "state" : "state1"

        },

        {

            "date" : ISODate("2019-09-03T07:54:38.144Z"),

            "state" : "state2"

        }

    ]

}


查看完整回答
反對 回復 2022-05-19
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

這可以是解決方案:


創建子字典以插入父字典:


    history[str(datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0, day=1))] = 'state1'

    history[str(datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0, day=2))] = 'state1'

    history[str(datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0, day=3))] = 'state1'

在父“out”字典中插入子字典


    out['history']=history

影響


    {'field1': 'a',

    'filed2': 'b',

    'field3': 'c',

    'history': {'2019-09-03 00:00:00': 'state1',

    '2019-09-02 00:00:00': 'state1',

    '2019-09-01 00:00:00': 'state1'}}


查看完整回答
反對 回復 2022-05-19
  • 2 回答
  • 0 關注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號