Maison  >  Article  >  développement back-end  >  Introduction à l'utilisation de setdefault en python3 (code)

Introduction à l'utilisation de setdefault en python3 (code)

不言
不言original
2018-09-13 16:44:562805parcourir

Le contenu de cet article concerne l'utilisation de setdefault dans python3 (code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Lorsque le dictionnaire d[k] ne trouve pas la bonne clé, Python lèvera une exception. Existe-t-il un moyen élégant d'éviter cette situation ? La réponse est oui.

index0.py obtient le. informations sur la fréquence des mots de l'index et les écrit dans la liste -- dict.setdefault

#!/usr/bin/env python
# coding=utf-8
import sys, re

WORD_RE = re.compile(r'\w+')

index = {}
with open(sys.argv[1], encoding='utf-8') as fp:
    for line_no, line in enumerate(fp, 1):
        for match in WORD_RE.finditer(line):
            word = match.group()
            column_no = match.start()+1
            location = (line_no, column_no)
            occurrences = index.get(word, [])
            occurrences.append(location)
            index[word] = occurrences

for word in sorted(index, key=str.upper):
    print(word, index[word])

zen.txt

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

n'est pas utilisé pour exécuter python3 index0.

a [(19, 48), (20, 53)]
Although [(11, 1), (16, 1), (18, 1)]
ambiguity [(14, 16)]
and [(15, 23)]
are [(21, 12)]
aren [(10, 15)]
at [(16, 38)]
bad [(19, 50)]
be [(15, 14), (16, 27), (20, 50)]
beats [(11, 23)]
Beautiful [(3, 1)]
better [(3, 14), (4, 13), (5, 11), (6, 12), (7, 9), (8, 11), (17, 8), (18, 25)]
break [(10, 40)]
by [(1, 20)]
cases [(10, 9)]
...

index.py utilise dict.setdefault pour résoudre le problème d'obtention et de mise à jour de la liste d'occurrences de mots sur une seule ligne

#!/usr/bin/env python
# coding=utf-8
import sys, re

WORD_RE = re.compile(r'\w+')

index = {}
with open(sys.argv[1], encoding='utf-8') as fp:
    for line_no, line in enumerate(fp, 1):
        for match in WORD_RE.finditer(line):
            word = match.group()
            column_no = match.start()+1
            location = (line_no, column_no)
            index.setdefault(word, []).append(location)

for word in sorted(index, key=str.upper):
    print(word, index[word])

En d'autres termes :

my_dict.setdefault(key, []).append(new_value)

équivaut à

if key not in my_dict:
    my_dict[key] = []
my_dict[key].append(new_value)

Les deux ont le même effet, sauf que setdefault ne doit terminer l'opération complète qu'une seule fois, tandis que cette dernière nécessite deux requêtes

Recommandations associées :

Utilisation de la méthode setdefault() pour la manipulation de dictionnaire en Python

Introduction à l'utilisation de super() et __class__ en Python3

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn