簡體   English   中英

如果列表不存在,如何創建列表,如果存在則添加到列表

[英]How to create a list if it doesn't exist and add to list if it does

假設我有一本看起來像這樣的字典:

mappings = {"some_key": 3}

或者它看起來像這樣:

mappings = {"some_key": [4,5,6]}

假設我在這個函數中有一個值 100 和一個鍵“some_key”:

def add_to_mappings(key, value):
    if key in mappings:
        mappings[key] = ?

如果它存在,我要么想添加到列表中,要么如果不存在,則創建一個。 最后,我希望我的映射看起來像:

   mappings = {"some_key": [3, 100]}

或者

   mappings = {"some_key": [4,5,6,100]}

沒有defaultdict

mappings = dict()

def add_to_mappings(key, value):
  try:
    mappings[key].append(100)
  except KeyError:
    mappings[key] = [100]

使用defaultdict

from collections import defaultdict

mappings = defaultdict(list)

def add_to_mappings(key, value):
  mappings[key].append(value)

編輯:我誤解了最初的要求,如果一個項目已經存在,並從中創建一個列表和新項目,那么第一個示例可以更改為:

mappings = dict(foo=3)

def add_to_mappings(key, value):
  try:
    mappings[key].append(100)
  except KeyError:
    mappings[key] = [100]
  except AttributeError:
    mappings[key] = [mappings[key], value]

add_to_mappings("foo", 5)
# mappings ==> { "foo": [3, 5] }

您可以使用isinstance(x, list)檢查某物是否是列表。 您可以從字典中提取現有值並用簡單賦值替換該值。 所以:

def add_to_mappings(d, key, value): # Remember to pass in the dict too!
    if key in d:
        # The value is present
        v = d[k]
        if isinstance(v, list):
            # Already a list: just append to it
            v.append(value)
        else:
            # Not a list: make a new list
            d[k] = [v, value]
    else:
        # Not present at all: make a new list
        d[key] = [value]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM