python dictionaries and objects

Keywords: Python Attribute Java

python dictionary

N Methods for Dictionary Initialization

  • Direct assignment

    a = {"one": 1, "two": 2, "three": 3}
    
  • Create a new dictionary object before assigning it dynamically

    b = dict()
    b["one"] = 1
    b["two"] = 2
    b["three"] = 3
    
  • When creating a new dictionary object, assign values by parameters

    c = dict(one=1, two=2, three=3)
    
  • When creating a new dictionary object, assign values through nested tuples and lists

    d = dict([("one", 1), ("two", 2), ("three", 3)])
    
  • Through the zip function

    e = dict(zip(["one", "two", "three"], [1, 2, 3]))
    
    list(zip(["one", "two", "three"], [1, 2, 3]))
    <<< [("one", 1), ("two", 2), ("three", 3)]
    zip()function:Package the corresponding elements in the object into tuples and return a list of those tuples
    

    To reduce memory in Python 3.x, zip() returns an object.To show a list, you need to convert the list() manually.

  • Create a new dictionary object so that it is passed directly into the dictionary object as a parameter

    f = dict({"one": 1, "two": 2, "three": 3})
    
  • Use fromkeys() to assign the same value to all keys in a dictionary

    g = dict.fromkeys(["height", "weight"], "normal")
    or
    g = dict.fromkeys(("height", "weight"), "normal")
    
    print(g)
    <<< {'height': 'normal', 'weight': 'normal'}
    

    If the second parameter is not specified, all keys correspond to a value of None

Graceful key acquisition

# A dictionary can get the value of a key like this
info= {'a': 1, 'b': 2}
info['a']
<<< 1
# In the above way, getting the value of a key that does not exist triggers a KeyError exception
# A dictionary has a get method that allows you to gracefully get the value of the corresponding key in the dictionary
info= {'a': 1, 'b': 2}
info.get('a')
<<< 1
info.get('c')
<<< None
info.get('c', 3)
<<< 3

Update of Dictionary

# update method
dict_a = {'a': 1, 'b': 2}
dict_b = {'a': 5, 'c': 7}
dict_a.update(dict_b)
print(dict_a)
<<< {'a': 5, 'b': 2, 'c': 7}

Delete Dictionary Key Values

# del built-in keyword
dict_a = {'a': 1, 'b': 2}
del dict_a['a']
print(dict_a)
<<< {'b': 2}

# The pop method of the dictionary
dict_a = {'a': 1, 'b': 2}
dict_a.pop('a')
<<< 1
print(dict_a)
<<< {'b': 2}

Get all key s and value s

dict_a = {'a': 1, 'b': 2, 'c': 3}
# Get all keys
dict_a.keys()
<<< dict_keys(['a', 'b', 'c'])
# Get all value s
dict_a.values()
<<< dict_values([1, 2, 3])
# Get all key-value pairs
dict_a.items()
<<< dict_items([('a', 1), ('b', 2), ('c', 3)])

Note: The above method returns a list that is not a real list and cannot be indexed directly. You can use the for loop to get the value or add a list() on the outer layer to convert it to a real list, that is, list(dict_a.keys()).

I thought the above method would return an iterator, but I tried using the next() method and proved that it is not an iterator, just to put iterator and generator in a nutshell.

next(dict_a.keys())
TypeError: 'dict_keys' object is not an iterator

  • generator (calculating while looping, unknown sequence length, inertia)

    If a function type contains the yieldkeyword, it is a generator.Executed each time next() is called, yielded statement returns are encountered, and executed again from the last statement that returned yield.

  • Iterable Objects

    You can use for loops, but you cannot use next(), such as list,tuple,dict,set,str.

  • Iterator

    You can use for and next(), for example, a generator; and iter(), you can make Iterable an Iterator.

Object-oriented

_slots_

# The u slots_u attribute restricts the properties of the object and does not allow private modification of types and numbers
class Test(object):
    __slots__ = ['a', 'b', 'c'] # or ('a', 'b', 'c')
    
t = Test()
t.d = 4
AttributeError: 'Test' object has no attribute 'd'
print(t.a)
AttributeError: b
# In other words, u slots_ simply restricts the properties of the object, but it has not really determined to add these properties to the object.

_init_()

# Class has a special method (construction method) called u init_(), which is called automatically when the class is instantiated
class Test(object):
    __slots__ = ['a', 'b', 'c']
    
    def __init__(self):
    	self.a = '1'

t = Test()
print(t.a)
<<< 1
# Of course, the u init_u() method can have parameters that are passed to the instantiation of a class through u init_()
class Test(object):
    __slots__ = ['a', 'b', 'c']
    
    def __init__(self, a, b):
    	self.a = a
        self.b = b
        
t = Test(100, 200)
print(t.a)    
<<< 100 

Note: self represents an instance of a class, not a class

Meaning of''and u'

Variables or methods starting with''are protected and can only be accessed by themselves and subclasses.

Variables or methods that start with u are private and can only be accessed by the class itself;

Note: u xx_ is a special variable or method, not a private variable

hasattr(),getattr(),setattr()

  • hasattr(obj, target)
  • getattr(obj, target, default)
  • setattr(obj, target, default)
class Test1(object):

    __slots__ = ('a', 'b', 'c')

# Show all properties of this class as defined and assign an initial value (Initial Value 1)
test = Test1()
for key in test.__slots__:
    setattr(test, key, 1)

# Check whether the object contains target attributes
print(hasattr(test, 'a'))
<<< True
print(hasattr(test, 'd'))
<<< False

# Get the target attribute value
print(getattr(test, 'b'))
<<< 1
print(getattr(test, 'd'))
AttributeError: 'Test1' object has no attribute 'd'
# As you can see, the getattr method does not get any properties that will cause errors and can be resolved by setting default values
print(getattr(test, 'd', 1))
<<< 1

Object to Dictionary

class Test1(object):    
    
    __slots__ = ('a', 'b', 'c')

test = Test1()
test.a = 1
test.b = 2

# Convert object test to dictionary
result = dict()
for key in test.__slots__:
    # Default values must be set here, or errors will most likely occur, such as the absence of a display definition for property c in this example
    result[key] = getattr(test, key, '')
    print(result)
<<< {'a': 1, 'b': 1, 'c': ''}

Trinomial operations in python

In C/C++/C# or Java, there are trinomial operators, conditional expression 1? Expression 1: expression 2;

Means that if the conditional expression 1 value is true, the entire expression is evaluated as expression 1, otherwise it is evaluated as expression 2.

python does not have the form a?b:c, but it has a similar expression, a if b else c, which means that if B is true, it returns a, otherwise it returns C.

a = 10
b = 20
c = a if True else b
d = a if False else b
print(c)
print(d)
<<< 10
<<< 20

Posted by Jeannie109 on Sun, 08 Sep 2019 18:58:08 -0700