簡體   English   中英

計算字典中鍵值對的數量

[英]counting the number of key value pairs in a dictionary

我是第一次與字典合作。 我想知道如何計算每個“可用”字典中有多少個鍵值對。 我知道我可能使用len()

seats = {
  'A': {'A1':'available', 'A2':'unavailable', 'A3':'available'},
  'B': {'B1':'unavailable', 'B2':'available', 'B3':'available'}, 
  'C': {'C1':'available', 'C2':'available', 'C3':'unavailable'}, 
  'D': {'D1':'unavailable', 'D2':'available', 'D3':'available'} }

rowChoice = raw_input('What row? >> ')
numSeats = input('How many Seats? >> ')

我對此很陌生,所以我真的需要一個非常簡單的方法,可能需要一些注釋或解釋它是如何工作的。

我將使用以下語句來計算每個嵌套字典的值:

{k: sum(1 for val in v.itervalues() if val == 'available') for k, v in seats.iteritems()}

這將使用與seats相同的鍵來構建新詞典,每個值都是可用的座位數。 具有生成器技巧的sum(..)有效地計算所包含的每行字典的所有值,其中值等於'available'

結果:

{'A': 2, 'C': 2, 'B': 2, 'D': 2}

要顯示特定行的可用座位,您可以過濾並僅使用len()

row_available = [k for k, v in seats[rowChoice].iteritems() if v == 'available']
avail_count = len(row_available)
if avail_count:
    print 'there {is_are} {count} seat{plural} available in row {rowChoice}, seat{plural} {seats}'.format(
        is_are='are' if avail_count > 1 else 'is', count=avail_count, 
        plural='s' if avail_count > 1 else '', rowChoice=rowChoice, 
        seats=row_available[0] if avail_count == 1 else ' and '.join([', '.join(row_available[:-1]), row_available[-1]]))

對於rowChoice = 'A'將輸出:

there are 2 seats available in row A, seats A1 and A3

但它也會調整以形成連貫的句子,以容納更多或更少的席位。

使用collections.Counteritertools.chain

from collections import Counter
from itertools import chain

print Counter(chain.from_iterable(i.itervalues() for i in seats.itervalues()))
# Counter({'available': 8, 'unavailable': 4})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM