2013-04-23 12 views
8

próbuję sformatować ciąg za pomocą elementu z zagnieżdżonego słowniku (poniżej)uzyskiwania dostępu zagnieżdżone słownika przedmioty w Pythonie

people = { 
     'Alice': { 
      'phone': '2341', 
      'addr': '87 Eastlake Court' 
      }, 

     'Beth': { 
      'phone': '9102', 
      'addr': '563 Hartford Drive' 
      }, 

     'Randy': { 
      'phone': '4563', 
      'addr': '93 SW 43rd' 
      } 

     } 

od powyższego (proste) słownika, chcę sformatować ciąg do wydrukowania Rozszerzenie telefonu Randy'ego.

jestem w stanie uzyskać dostęp do wszystkich swoich informacji za pomocą:

print("Randy's phone # is %(Randy)s" % people) 

Ale nie jestem pewien, w jaki sposób głębiej do słownika wydzielić tylko numer telefonu ze słownika.

Używam Python 3.3, przy okazji.

Odpowiedz

25

Użyj new string formatting:

print("Randy's phone # is {0[Randy][phone]}".format(people)) 

lub

print("Randy's phone # is {Randy[phone]}".format(**people)) 

 

Nie ma sensu w przejściu całego słownika, jeśli używasz tylko jedną wartość.

print("Randy's phone # is {}".format(people['Randy']['phone'])) 

lub

print("Randy's phone # is %s" % people['Randy']['phone']) 

będzie również działać.

Przekazywanie dyktowania ma sens, jeśli masz dużo tych ciągów formatów i nie wiesz, z których wartości korzystają, i chcesz, aby miały dostęp do dowolnej wartości.

Lub jeśli używasz wielu wartości w ciągu formatu i przekazywanie ich pojedynczo jest po prostu zbyt szczegółowe.

+0

To jest najmodniejsze rozwiązanie, IMO, ale '" Numer telefonu Randy'ego to% s "% osób ['Randy'] ['telefon']' jest nieznacznie bardziej efektywny. – Aya

+0

To jest dokładnie to! Dziękuję, nie wiedziałem o nowym formatowaniu ciągów znaków. Inbar przedstawił kolejną ważną opcję: 'print (" Numer telefonu Randy'ego to% (telefon) s "% osób [" randy ']) ' Czy ktoś preferowałby jedno z drugim, czy też bardziej" Pythoniczny "? – Keith

+0

Ten komentarz został dodany do odpowiedzi. –

Powiązane problemy