Initializing a dictionary in python with a key value and no corresponding values

前端 未结 8 1905
情深已故
情深已故 2021-01-30 19:29

I was wondering if there was a way to initialize a dictionary in python with keys but no corresponding values until I set them. Such as:

Definition = {\'apple\':         


        
相关标签:
8条回答
  • 2021-01-30 19:59

    It would be good to know what your purpose is, why you want to initialize the keys in the first place. I am not sure you need to do that at all.

    1) If you want to count the number of occurrences of keys, you can just do:

    Definition = {}
    # ...
    Definition[key] = Definition.get(key, 0) + 1
    

    2) If you want to get None (or some other value) later for keys that you did not encounter, again you can just use the get() method:

    Definition.get(key)  # returns None if key not stored
    Definition.get(key, default_other_than_none)
    

    3) For all other purposes, you can just use a list of the expected keys, and check if the keys found later match those.

    For example, if you only want to store values for those keys:

    expected_keys = ['apple', 'banana']
    # ...
    if key_found in expected_keys:
        Definition[key_found] = value
    

    Or if you want to make sure all expected keys were found:

    assert(all(key in Definition for key in expected_keys))
    
    0 讨论(0)
  • 2021-01-30 20:00

    Comprehension could be also convenient in this case:

    # from a list
    keys = ["k1", "k2"]
    d = {k:None for k in keys}
    
    # or from another dict
    d1 = {"k1" : 1, "k2" : 2}
    d2 = {k:None for k in d1.keys()}
    
    d2
    # {'k1': None, 'k2': None}
    
    0 讨论(0)
  • 2021-01-30 20:02

    You can initialize the values as empty strings and fill them in later as they are found.

    dictionary = {'one':'','two':''}
    dictionary['one']=1
    dictionary['two']=2
    
    0 讨论(0)
  • 2021-01-30 20:02
    q = input("Apple")
    w = input("Ball")
    Definition = {'apple': q, 'ball': w}
    
    0 讨论(0)
  • 2021-01-30 20:08

    you could use a defaultdict. It will let you set dictionary values without worrying if the key already exists. If you access a key that has not been initialized yet it will return a value you specify (in the below example it will return None)

    from collections import defaultdict
    your_dict = defaultdict(lambda : None)
    
    0 讨论(0)
  • 2021-01-30 20:10

    Based on the clarifying comment by @user2989027, I think a good solution is the following:

    definition = ['apple', 'ball']
    data = {'orange':1, 'pear':2, 'apple':3, 'ball':4}
    my_data = {}
    for k in definition:
      try:
        my_data[k]=data[k]
      except KeyError:
        pass
    print my_data
    

    I tried not to do anything fancy here. I setup my data and an empty dictionary. I then loop through a list of strings that represent potential keys in my data dictionary. I copy each value from data to my_data, but consider the case where data may not have the key that I want.

    0 讨论(0)
提交回复
热议问题