0

API を呼び出して、次のデータ構造を取得しています。

{u'query': {u'pages': {u'120714': {u'ns': 0, u'pageid': 120714, u'revisions': [{u'size': 985}], u'title': u'Daniel Nannskog'}}, u'userinfo': {u'anon': u'', u'id': 0, u'name': u'2620:0:862:101:0:0:2:4'}}}

私が欲しいのは、このデータ構造からサイズを取得することです。ここからデータを抽出する方法は知っていますが、問題は抽出時にページの後のキー(120714)がわからないことです。たとえば:

lets assign this to a variable = d
>>> d
{u'query': {u'pages': {u'120714': {u'title': u'Daniel Nannskog', u'ns': 0, u'pageid': 120714, u'revisions': [{u'size': 985}]}}, u'userinfo': {u'anon': u'', u'id': 0, u'name': u'2620:0:862:101:0:0:2:4'}}}
>>> d['query']['pages']['120714']['revisions']
[{u'size': 985}]
>>> 

しかし、抽出前に第 2 レベルのキーの値を知らずにサイズを取得するにはどうすればよいでしょうか?

4

2 に答える 2

2

キーが不明であると言っている場合120714、下にキーが1つしかない場合は、次のようにd['query']['pages']します。

e = d['query']['pages']
key = e.keys()[0]
print e[key]['revisions']

次のようになります。

>>> d = {u'query': {u'pages': {u'120714': {u'title': u'Daniel Nannskog', u'ns': 0, u'pageid': 120714, u'revisions': [{u'size': 985}]}}, u'userinfo': {u'anon': u'', u'id': 0, u'name': u'2620:0:862:101:0:0:2:4'}}}
>>> e = d['query']['pages']
>>> key = e.keys()[0]
>>> print e[key]['revisions']
[{u'size': 985}]
于 2013-03-16T04:54:27.920 に答える
2

質問はあまり明確ではありませんが、私はあなたが何をしようとしているのかを推測しようとします、そしてうまくいけば、私が間違って推測したとしても、それはあなたに答えを示すでしょう。

あなたはあなたが持っているページを知りません。しかし、あなたはあなたが持っているページが何であれ、あなたはそれらのサイズが欲しいことを知っています。つまり、pages値が持つキーに関係なく、のすべての値にアクセスする必要があります。

それはまさに何をするかdict.valuesです:

sizes = [page['revisions'][0]['size'] for page in d['query']['pages'].values()]

リスト内包表記がわからない場合は、分解してみましょう。

pages = d['query']['pages']
# {u'120714': {u'ns': 0, u'pageid': 120714, 
#              u'revisions': [{u'size': 985}], u'title': u'Daniel Nannskog'}}
every_page = pages.values()
# [{u'ns': 0, u'pageid': 120714,
#   u'revisions': [{u'size': 985}], u'title': u'Daniel Nannskog'}]
sizes = []
for page in every_page:
    # {u'ns': 0, u'pageid': 120714,
    #  u'revisions': [{u'size': 985}], u'title': u'Daniel Nannskog'}
    sizes.append(page['revisions'][0]['size'])

最初のリビジョンのみを選択していることに注意してください。すべてのリビジョンのサイズ、最大、またはそれらの合計、または最新のもの、またはその他のものが必要な場合は、変更するのはそれほど難しくありません。

同じことがページにも当てはまります。最初のページ、最大のページ、ページ全体のサイズの合計などが必要な場合は、そこで変更することもできます。

たとえば、リビジョンが1つしかないページが1つしかないことがわかっている場合、全体は次のようになります。

size = d['query']['pages'].values()[0]['revisions'][0]['size']
于 2013-03-16T04:55:49.443 に答える