Heim > Artikel > Backend-Entwicklung > Verwendung der Namedtuple-Funktion in der Python-Analyse
benanntes Tupel handelt, so dass auf das Tupel mit einem Schlüssel wie auf eine Liste zugegriffen werden kann (und auch auf die über den Index zugegriffen werden kann).
collections.namedtuple ist eine Factory-Funktion, mit der ein Tupel mit Feldnamen und einer benannten Klasse erstellt werden kann. Für die Erstellung eines benannten Tupels sind zwei Parameter erforderlich, einer ist der Klassenname und der andere der Klassenname Feld.
Die im entsprechenden Feld gespeicherten Daten müssen in Form einer Reihe von Parametern an den Konstruktor übergeben werden (beachten Sie, dass der Tupelkonstruktor nur ein einzelnes iterierbares Objekt akzeptiert). Benannte Tupel haben auch einige eigene einzigartige Eigenschaften. Die nützlichsten: Klassenattribute _fields, Klassenmethode _make(iterable) und Instanzmethode _asdict().
def namedtuple(typename, field_names, *, rename=False, defaults=None, module=None): """Returns a new subclass of tuple with named fields. >>> Point = namedtuple('Point', ['x', 'y']) >>> Point.__doc__ # docstring for the new class 'Point(x, y)' >>> p = Point(11, y=22) # instantiate with positional args or keywords >>> p[0] + p[1] # indexable like a plain tuple 33 >>> x, y = p # unpack like a regular tuple >>> x, y (11, 22) >>> p.x + p.y # fields also accessible by name 33 >>> d = p._asdict() # convert to a dictionary >>> d['x'] 11 >>> Point(**d) # convert from a dictionary Point(x=11, y=22) >>> p._replace(x=100) # _replace() is like str.replace() but targets named fields Point(x=100, y=22) """
Beispielcode 2:
namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
Laufergebnis:
Beispielcode 3:
from collections import namedtuple
# 定义一个命名元祖city,City类,有name/country/population/coordinates四个字段
city = namedtuple('City', 'name country population coordinates')
tokyo = city('Tokyo', 'JP', 36.933, (35.689, 139.69))
print(tokyo)
# _fields 类属性,返回一个包含这个类所有字段名称的元组
print(city._fields)
# 定义一个命名元祖latLong,LatLong类,有lat/long两个字段
latLong = namedtuple('LatLong', 'lat long')
delhi_data = ('Delhi NCR', 'IN', 21.935, latLong(28.618, 77.208))
# 用 _make() 通过接受一个可迭代对象来生成这个类的一个实例,作用跟City(*delhi_data)相同
delhi = city._make(delhi_data)
# _asdict() 把具名元组以 collections.OrderedDict 的形式返回,可以利用它来把元组里的信息友好地呈现出来。
print(delhi._asdict())
Beispielcode 4:
from collections import namedtuple
Person = namedtuple('Person', ['age', 'height', 'name'])
data2 = [Person(10, 1.4, 'xiaoming'), Person(12, 1.5, 'xiaohong')]
print(data2)
res = data2[0].age
print(res)
res2 = data2[1].name
print(res2)
Beispielcode 5:
【_make erstellt eine Instanz aus einer vorhandenen Sequenz oder. Iteration】from collections import namedtuple
card = namedtuple('Card', ['rank', 'suit']) # 定义一个命名元祖card,Card类,有rank和suit两个字段
class FrenchDeck(object):
ranks = [str(n) for n in range(2, 5)] + list('XYZ')
suits = 'AA BB CC DD'.split() # 生成一个列表,用空格将字符串分隔成列表
def __init__(self):
# 生成一个命名元组组成的列表,将suits、ranks两个列表的元素分别作为命名元组rank、suit的值。
self._cards = [card(rank, suit) for suit in self.suits for rank in self.ranks]
print(self._cards)
# 获取列表的长度
def __len__(self):
return len(self._cards)
# 根据索引取值
def __getitem__(self, item):
return self._cards[item]
f = FrenchDeck()
print(f.__len__())
print(f.__getitem__(3))
Beispielcode 6:
[_asdict gibt ein neues geordnetes Diktat zurück und ordnet Feldnamen den entsprechenden Werten zu]from collections import namedtuple
person = namedtuple('Person', ['first_name', 'last_name'])
p1 = person('san', 'zhang')
print(p1)
print('first item is:', (p1.first_name, p1[0]))
print('second item is', (p1.last_name, p1[1]))
Beispielcode 7:
[_replace Gibt eine neue Instanz zurück und ersetzt das angegebene Feld durch einen neuen Wert.
Beispielcode 9:[Verwenden Sie Felder, um zwei benannte Tupel zu kombinieren]
from collections import namedtuple course = namedtuple('Course', ['course_name', 'classroom', 'teacher', 'course_data']) math = course('math', 'ERB001', 'Xiaoming', '09-Feb') print(math) print(math.course_name, math.course_data) course_list = [ ('computer_science', 'CS001', 'Jack_ma', 'Monday'), ('EE', 'EE001', 'Dr.han', 'Friday'), ('Pyhsics', 'EE001', 'Prof.Chen', 'None') ] for k in course_list: course_i = course._make(k) print(course_i)
Laufergebnisse:
Beispielcode 10:
[field_defaults]
from collections import namedtuple person = namedtuple('Person', ['first_name', 'last_name']) zhang_san = ('Zhang', 'San') p = person._make(zhang_san) print(p) # 返回的类型不是dict,而是orderedDict print(p._asdict())
Laufergebnisse:
Beispielcode 11:
[namedtuple ist eine Klasse, daher kann die Funktion durch Unterklassen geändert werden]
from collections import namedtuple person = namedtuple('Person', ['first_name', 'last_name']) zhang_san = ('Zhang', 'San') p = person._make(zhang_san) print(p) p_replace = p._replace(first_name='Wang') print(p_replace) print(p) p_replace2 = p_replace._replace(first_name='Dong') print(p_replace2)
Laufergebnisse:
Beispielcode 12:
[Hinweis: Beachten Sie den Unterschied zwischen den beiden Schreibweisen Methoden]
from collections import namedtuple person = namedtuple('Person', ['first_name', 'last_name']) zhang_san = ('Zhang', 'San') p = person._make(zhang_san) print(p) print(p._fields)
Laufende Ergebnisse:
[Verwandte Empfehlungen:
Python3-Video-Tutorial]
Das obige ist der detaillierte Inhalt vonVerwendung der Namedtuple-Funktion in der Python-Analyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!