1

初めて辞書を扱っています。値が「利用可能」である各辞書にあるキーと値のペアの数をカウントする方法を知りたいです。私はおそらく使用することを知っています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? >> ')

私はこれに非常に慣れていないので、非常に単純な方法と、おそらくそれがどのように機能するかの注釈または説明が本当に必要です。

4

2 に答える 2

3

次のステートメントを使用して、ネストされた各辞書の値をカウントします。

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

seatsこれにより、各値が利用可能な座席数であるのと同じキーから新しい辞書が作成されます。sum(..)with generator トリックは、値が等しい行ごとのディクショナリのすべての値を効率的にカウントします'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

しかし、座席数が多かれ少なかれ、首尾一貫した文を形成するように調整されます。

于 2013-04-16T08:27:30.690 に答える