Tipps zur Python-Wörterbuch- und Sammlungsprogrammierung

Hallo, hier ist der Blog von Token_w, herzlich willkommen.
Heute werde ich hauptsächlich die Verwendungsfähigkeiten von Python-Wörterbüchern und -Sets in der tatsächlichen Programmierung erläutern.
Es ist nicht einfach zu organisieren und wird Ihnen hilfreich sein. Ich hoffe auf Ihre Unterstützung! dankbar! ! !

Inhaltsverzeichnis

1. Wie filtere ich Daten nach Bedingungen in Listen, Wörterbüchern und Sammlungen?

tatsächlicher Fall

  • Fall 1: Negative Zahlen in der Liste herausfiltern [3, 9, -1, 10, 20, -2, …]
  • Fall 2: Filtern Sie die Elemente heraus, deren Wert höher als 90 im Wörterbuch ist {'lisi': 79, 'Jin': 88, 'lucy': 93, … }
  • Fall 3: Es ist relativ einfach, die Elemente in der Menge {77, 89, 34, 20, 21…} herauszufiltern, die durch 3 teilbar sind. Die übliche Methode besteht darin, jedes Element in der Liste, im Wörterbuch
    und in der Menge zu iterieren der Reihe nach und führen Sie den Zustandsrichter durch.

Aber in Python gibt es fortgeschrittenere Möglichkeiten, diese Art von Problem zu lösen, und es ist einfacher und effizienter.

01 Fall 1: Negative Zahlen in der Liste herausfiltern [3, 9, -1, 10, 20, -2, …]

Methode 1: Verwenden Sie die Filterfunktion

from random import randint

# 使用列表解析生成 -10~10 之间的10个元素
data = [randint(-10, 10) for _ in range(10)]

print('原始列表为:' , data)

# filter(function or None, iterable) --> filter object
data_o = filter(lambda x: x >= 0, data)

for each in data_o:
    
    print(each)

Methode 2: Verwenden Sie ein Listenverständnis

from random import randint

# 使用列表解析生成 -10~10 之间的10个元素
data = [randint(-10, 10) for _ in range(10)]

print('原始列表为:',  data)

data_o = [x for x in data if x >= 0]

print(data_o)

02 Fall 2: Elemente aus dem Wörterbuch herausfiltern, deren Wert größer als 90 ist {'lisi': 79, 'Jin': 88, 'lucy': 93, … }

from random import randint

# 使用字典解析生成 一个字典
d ={
    
    x: randint(60, 100) for x in range(1, 10)}
print(d)

d_o = {
    
    k: v for k, v in d.items() if v >= 90}

print(d_o)

03 Fall 3: Filtern Sie die durch 3 teilbaren Elemente in der Menge {77, 89, 34, 20, 21...} aus

from random import randint

# 使用集合解析生成 -10~10 之间的10个元素
data = {
    
    randint(-10, 10) for _ in range(10)}

print('原始集合为:', data)

data_o = {
    
    x for x in data if x % 3 == 0}

print(data_o)

2. Wie benenne ich jedes Element im Tupel, um die Lesbarkeit des Programms zu verbessern?

stuents = ('Jim', 16, 'male', '[email protected]')
name=stuents[0]
age=stuents[1]
sex= stuents[2]
email=stuents[3]
print(name, age, sex, email)

01 Methode 1: Definieren Sie Aufzählungstypen ähnlich wie in anderen Sprachen, dh definieren Sie eine Reihe numerischer Konstanten

s=stuents = ('Jim', 16, 'male', '[email protected]')
NAME, AGE, SEX, EMAIL = range(4)
name=s[NAME]
age=s[AGE]
sex= s[SEX]
email=s[EMAIL]
print(name, age, sex, email)

02 Methode 2: Verwenden Sie „collections.namedtuple“ in der Standardbibliothek, um das integrierte Tupel zu ersetzen

from collections import namedtuple
Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])
s = Student('Jim', 16, 'male', '[email protected]')
print(s)
# Student(name='Jim', age=16, sex='male', email='[email protected]')

print(s.name)
# 'Jim'

print(s.age)
# 16

print(s.sex)
# 'male'

print(s.email)
# '[email protected]'

3. Wie zählt man die Häufigkeit des Auftretens von Elementen in der Sequenz?

Fall 1:

Methode 1: Traditionelle Methode

from random import randint

# 随机生成一个列表
data = [randint(0, 20) for _ in range(30)]

# 以列表中的值为字典的键,0为字典的值建立字典
c = dict.fromkeys(data, 0)

# 依次遍历列表,遇到一个元素,就把字典中对应的键的值加1
for x in data:

    c[x] += 1

print(c)

Methode 2: Verwenden Sie dascollections.Counter-Objekt

Übergeben Sie die Sequenz an den Konstruktor von Counter und erhalten Sie das Counter-Objekt als Wörterbuch der Elementhäufigkeiten.
Die Methode Counter.most_common(n) ruft die Liste der n Elemente mit der höchsten Häufigkeit ab

from random import randint
from collections import Counter

# 随机生成一个列表
data = [randint(0, 20) for _ in range(30)]

c = Counter(data)

# 得到的 c 就是一个collections.Counter类型的数据,和方法 一 结果一样
# 用法与字典一样,例如 c[2] , 就是得到 键为2 对应的值
print(c)

# 另外,还可以使用 most_common() 方法得到 出现频率最高的几个键和值
print(c.most_common(3))  # 输出前3名

Fall 2:

from collections import Counter
import re

with open('./test.txt', 'r') as f:
    txt = f.read()

# 使用 正则表达式 对文本进行切割,按照 非字母字符 进行切割
l1 = re.split('\W+', txt)

c = Counter(l1)

# 得到频率最高的10个单词
print(c.most_common(10))

4. Wie sortiere ich die Elemente im Wörterbuch nach der Größe der Werte im Wörterbuch?

01 Methode 1: Verwenden Sie zip, um Wörterbuchdaten in Tupel umzuwandeln

from random import randint

# 生成随机字典
d = {
    
    x:randint(60,100) for x in 'xyzabc'}

print(d)

# 把值放在前面,键放在后面,构成元组,每个元组为列表的一个项
# 得到的结果为 [(74, 'z'), (80, 'y')...]形式
list1 = zip(d.values(), d.keys())

# 然后对得到的列表进行排序,就会以列表中的元组的第一项排序,相同时再比较第二项

print(sorted(list1))

02 Methode 2: Verwenden Sie den Schlüsselparameter der sortierten Funktion

from random import randint

# 生成随机字典
d = {
    
    x:randint(60,100) for x in 'xyzabc'}

print(d)

# d.items() 也是一个元组的列表,只是元组中键在前,值在后
# 使用 key 参数设置以第二项 (值)作为排序依据

print(sorted(d.items(), key = lambda x: x[1]))

5. Wie finde ich schnell gemeinsame Schlüssel in mehreren Wörterbüchern?

01 Methode 1: Traditionelle Methode, abwechselnd traversieren

from random import randint, sample

# 随机产生 3 场球赛的 进球人和数
s1 = {
    
    x: randint(1,4) for x in sample('abcdefg',randint(3,6))}
s2 = {
    
    x: randint(1,4) for x in sample('abcdefg',randint(3,6))}
s3 = {
    
    x: randint(1,4) for x in sample('abcdefg',randint(3,6))}

print(s1)
print(s2)
print(s3)


# 传统方法
res = []

for k in s1:
    if k in s2 and k in s3:
        res.append(k)
       
print(res)

02 Methode 2: Verwenden Sie die Schnittoperation der Menge (Menge)

Verwenden Sie die Methode „keys()“ des Wörterbuchs, um einen Satz von Schlüsseln eines Wörterbuchs abzurufen.
Nehmen Sie den Schnittpunkt der Schlüsselsätze aller Wörterbücher

from random import randint, sample

# 随机产生 3 场球赛的 进球人和数
s1 = {
    
    x: randint(1,4) for x in sample('abcdefg',randint(3,6))}
s2 = {
    
    x: randint(1,4) for x in sample('abcdefg',randint(3,6))}
s3 = {
    
    x: randint(1,4) for x in sample('abcdefg',randint(3,6))}

print(s1)
print(s2)
print(s3)


print(s1.keys() & s2.keys() & s3.keys())

6. Wie halte ich das Wörterbuch in Ordnung?

d = dict()

d['Jim']=(1.35)

d['Leo']=(2,37)

d['Bob']=(3,45)

for k in d:
    print(k)

Methode: Sammlungen.OrderedDict verwenden

Ersetzen Sie das Wörterbuch Dict durch OrderedDict und speichern Sie die Punktzahlen der Spieler der Reihe nach in OrderedDict.


from collections import OrderedDict

d = OrderedDict()

d['Jim']=(1.35)

d['Leo']=(2,37)

d['Bob']=(3,45)

for k in d:
    print(k)

7. Wie wird die Verlaufsaufzeichnungsfunktion des Benutzers implementiert?

Der Originalcode lautet wie folgt:

from random import randint

N = randint(0, 100)

def guess(k):
	if k == N:
		print('猜对了')
		return True
	elif k < N:
		print('猜小了')
	else:
		print('猜大了')
	return False

while True:
	line = input("please input a number:")
	if line.isdigit():
		k = int(line)
		if guess(k):
			break

Wir wollen die letzten 5 Vermutungen speichern, die vorherigen werden gelöscht

Lösung:

Verwenden Sie eine Warteschlange mit einer Kapazität von n (n = 5 in diesem Beispiel), um den Verlauf zu speichern.
Verwenden Sie Deque aus der Standardbibliothek, bei der es sich um eine doppelendige zirkuläre Warteschlange handelt

from random import randint
from collections import deque

history = deque([], 5)

N = randint(0, 100)

def guess(k):
	if k == N:
		print('猜对了')
		return True
	elif k < N:
		print('猜小了')
	else:
		print('猜大了')
	return False

while True:
	line = input("please input a number:")
	if line.isdigit():
		k = int(line)
		history.append(k)
		if guess(k):
			break
	elif line == 'history' or line == 'h?':
		print(history)

Wenn wir beim nächsten Ausführen des Programms auch den vorherigen Verlauf anzeigen möchten, müssen wir das Warteschlangenobjekt auf der Festplatte speichern und können Pickle verwenden

pickle kann jede Art von Daten (einschließlich Zahlen, Listen, Wörterbüchern, Zeichenfolgen usw.) in Festplattendateien speichern und bei Bedarf als Originaldaten zurücklesen

Lösung: Bevor das Programm beendet wird, können Sie mit pickle das Warteschlangenobjekt in einer Datei speichern und es importieren, wenn Sie das Programm erneut ausführen

Verwendung von Gurke:

Daten schreiben:

import pickle

data = [1, 2, 3, 4]

with open('data.dat', 'wb') as f:

    pickle.dump(data, f)

Daten lesen:

import pickle

with open('data.dat', 'rb') as f:

    data = pickle.load(f)

print(data)

Zusammenfassen

Heute werde ich Ihnen anhand einiger grundlegender Codefälle einige Tipps zur Verwendung von Wörterbüchern und Mengen in Python in der tatsächlichen Programmierung geben. Ich hoffe, es wird Ihnen hilfreich sein!

Ich denke du magst

Origin blog.csdn.net/weixin_61587867/article/details/132270140
Empfohlen
Rangfolge