kiri___
@kiri___

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

set型の文法について教えてほしい

解決したいこと

今学習しているpaizaの問題で、初めて見る文法が出てきたので教えて頂きたいです。
roster = {x: y for x, y in [input().split() for _ in range(N)]}
set型は分かるのですか、最初の部分のx: yがどのような意味で書かれているのか教えて頂きたいです。
他の部分は理解できます。
補足ですが、paizaのスキルチェックの問題では無いので、規約違反には当たらないです。

問題文も掲載します。
3xxx年、ロボット学校の先生である paiza 君は、新しく担当するクラスの生徒一人一人の出席番号と識別 ID を覚えて、出席番号が与えられたら、その生徒の識別 ID を言えるようになる必要があります。
paiza 君の務める学校は転校が多く、頻繁に生徒が増減します。

覚えるべき生徒の出席番号と識別 ID が与えられたのち、いくつかのイベントを表す文字列が与えられるので、与えられた順に各イベントに応じて次のような処理をおこなってください。

・join num id
生徒番号 num , 識別ID id の生徒を新たに覚える

・leave num
生徒番号 num の生徒を忘れる

・call num
生徒番号 num の生徒の識別 ID を出力する

発生している問題・エラー

エラーメッセージはありません

該当するソースコード

N, K = map(int, input().split())
roster = {x: y for x, y in [input().split() for _ in range(N)]}

for _ in range(K):
    s = input().split()
    if s[0] == "join":
        num, ID = s[1:]
        roster[num] = ID
    elif s[0] == "leave":
        num = s[1]
        del roster[num]
    else:
        num = s[1]
        print(roster[num])

自分で試したこと

インターネットで文法について調べてみましたが、該当する記事が見つかりませんでした。

1

2Answer

こちらの問題ですね。

roster = {x: y for x, y in [input().split() for _ in range(N)]}

こちらの記述についてですが、正しくはset型ではなくdictionary型です。
入力で与えられる2個ずつの値を、key:valueとして辞書型にしています。

入力
1 Sin
2 Sakura
3 Kayo
4 Yui
roster = {x: y for x, y in [input().split() for _ in range(4)]}
print(type(roster))
print(roster)
出力
<class 'dict'>
{'1': 'Sin', '2': 'Sakura', '3': 'Kayo', '4': 'Yui'}
4Like

良いサンプルがありませんでした

内包表記で辞書型を作成してます。
一般的にpythonはリスト型、タプル(set)型による内包表記が多いです。

1Like

Your answer might help someone💌