2010-01-14 11 views
54
sentence = "The quick brown fox jumped over the lazy dog." 
characters = {} 

for character in sentence: 
    characters[character] = characters.get(character, 0) + 1 

print(characters) 

characters.get(character, 0) + 1'un ne yaptığını anlamıyorum, her şey oldukça basit görünüyor. BuradaPython'da .get() yöntemi

cevap

68

bir dict get yöntemi (gibi örneğin characters için) sadece anahtar yoksa, dışında dicti indeksleme yerine o (varsayılan değer döndüren bir KeyError yükselterek gibi çalışır Birlikte .get ararsanız sadece bir argüman, anahtar, varsayılan değer None).

Yani myget(d, k, v) arayarak sadece d.get(k, v) gibidir eşdeğer bir Python fonksiyonu (olabilir: sahipse bile: Sorunuza örnek kod açıkça her karakterin yineleme sayısını hesaplamak için çalışıyor

def myget(d, k, v=None): 
    try: return d[k] 
    except KeyError: return v 

bir, belirli bir karakter için başka o (yani sadece bir artırılır oluyor) get döner, get döner 0 (böylece artan doğru dizesinde bir karakterin ilk geçtiği yerdeki 1 verir).

9

Başlangıç ​​http://docs.python.org/tutorial/datastructures.html#dictionaries

Sonra burada http://docs.python.org/library/stdtypes.html#mapping-types-dict

Sonra burada

characters.get(key, default) 

key is a character 

default is 0 

karakter sözlükte, characters ise http://docs.python.org/library/stdtypes.html#dict.get, tüm sözlük nesne olsun.

olmasın, 0.


Syntax'i alırsanız: anahtarı için

get(key[, default])

Dönüş değeri anahtar sözlükte, başka varsayılan ise. Varsayılan değer verilmezse, varsayılan olarak None, bu yöntem hiçbir zaman KeyError'u yükseltmez.

6

d bir sözlük ise saymak daha sonra d.get(k, v), k'de yokken k'nin değerini verir, k burada olmazsa, bu durumda bana v verir. Burada karakterin geçerli sayımını almak için kullanılır, karakter 0 değilse başlamalıdır. daha önce karşılaşıldı.

18

Neler olup bittiğini anlamak için, tümcesinde dizgisinde bir harfi (bir kereden fazla tekrarlanan) alalım ve döngü boyunca ne olduğunu izleyin.

boş bir karakterden Sözlük

characters = {} 

Ben mektubu 'e' bulacaktır ile başlamak unutmayın. Döngüden ilk kez 'e' karakterini (The kelimesiyle) iletelim.Ben döngü geçmesi ilk karakter üstlenecek ve onların değerleri ile değişkenleri yerine edeceğiz:

for 'e' in "The quick brown fox jumped over the lazy dog.": 
    {}['e'] = {}.get('e', 0) + 1 

characters.get ('e', ​​0) tuşu 'aramaya piton söyler e 'sözlüğünde. Bulunmazsa, 0 değerini döndürür. Bu, ilk kez 'e' döngüsünden geçirildiği için, 'e' karakteri henüz sözlükte bulunamadı, bu nedenle yönteminin 0 değerini döndürür. Bu 0 değeri o zaman eklenmiştir ([character] = karakter.get (karakter, 0) + denkleminde bulunur). ,

characters = {'e': 1} 

Şimdi: {: 1 'e':}

Sözlük şimdi 'e' karakterini kullanarak ilk döngünün tamamlanmasından sonra, artık böyle sözlükte bir girdi var Aynı döngü boyunca ikinci 'e' (atlanan kelimede bulunan) geçelim. Ben döngü geçmesi ikinci karakter varsayıyoruz ve onların yeni değerlerle değişkenleri güncelleyeceğiz: Burada

for 'e' in "The quick brown fox jumped over the lazy dog.": 
    {'e': 1}['e'] = {'e': 1}.get('e', 0) + 1 

olsun yöntem 'e' için önemli bir girdiyi bulur ve değerini bulur 1. Diğerlerini karakterlerine ekleyin. code (karakter, 0) + ve sonuç olarak 2 olsun.

karakterlere bu uyguladığınızda [karakter] = characters.get (karakter, 0) + 1 denklemi:

characters['e'] = 2 

son denklem zaten yeni bir değer 2 atadığı açık olmalıdır mevcut 'e' anahtarı. Ben bu oldukça eski bir sorudur bkz

characters = {'e': 2} 
2

ama bu bir şey dil özelliği bilgisi dışında yazılı oldu o zamanlardan biri gibi görünür: nedenle Sözlük şimdi. Bu amaçları gerçekleştirmek için collections kitaplığı bulunmaktadır. alanlarda sayılan bu örnekte

from collections import Counter 
letter_counter = Counter() 
for letter in 'The quick brown fox jumps over the lazy dog': 
    letter_counter[letter] += 1 

>>> letter_counter 
Counter({' ': 8, 'o': 4, 'e': 3, 'h': 2, 'r': 2, 'u': 2, 'T': 1, 'a': 1, 'c': 1, 'b': 1, 'd': 1, 'g': 1, 'f': 1, 'i': 1, 'k': 1, 'j': 1, 'm': 1, 'l': 1, 'n': 1, 'q': 1, 'p': 1, 's': 1, 't': 1, 'w': 1, 'v': 1, 'y': 1, 'x': 1, 'z': 1}) 

, açıkçası, süzüldü o isteyen fakat olup olmadığı hakkında bağlıdır.

dict.get(a_key, default_value)'a gelince, bu soruya birçok yanıt geldi - bu yöntem anahtarın değerini veya sağladığınız varsayılan_değer değerini döndürür. İlk argüman, aradığınız anahtardır, ikinci argüman, bu anahtarın mevcut olmadığı zaman için varsayılan değerdir.

İlgili konular