Nano Hash - криптовалюты, майнинг, программирование

AttributeError: объект «unicode» не имеет атрибута «значения» при анализе значений словаря JSON

У меня есть следующий словарь JSON:

{
 u'period': 16, u'formationName': u'442', u'formationId': 2, 
 u'formationSlots': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0], 
 u'jerseyNumbers': [1, 20, 3, 15, 17, 5, 19, 6, 18, 25, 10, 2, 4, 12, 16, 22, 24, 
                    34], 
 u'playerIds': [23122, 38772, 24148, 39935, 29798, 75177, 3860, 8505, 
               26013, 3807, 34693, 18181, 4145, 23446, 8327, 107395, 29762, 254558], 
 u'captainPlayerId': 29798, 
 u'startMinuteExpanded': 0, 
 u'endMinuteExpanded': 82, 
 u'formationPositions': [{u'horizontal': 5.0, u'vertical': 0.0}, 
     {u'horizontal': 1.0, u'vertical': 2.5}, {u'horizontal': 9.0, u'vertical': 2.5}, 
     {u'horizontal':3.5, u'vertical': 6.0}, {u'horizontal': 3.5, u'vertical': 2.5}, 
     {u'horizontal': 6.5, u'vertical': 2.5}, {u'horizontal': 1.0, u'vertical': 6.0}, 
     {u'horizontal': 6.5, u'vertical': 6.0}, {u'horizontal': 6.5, u'vertical': 9.0}, 
     {u'horizontal': 3.5, u'vertical': 9.0}, {u'horizontal': 9.0, u'vertical': 6.0}]
}

Как видите, некоторые значения словаря содержатся в списках. Я пытаюсь программно получить все значения этого объекта следующим образом:

for myvalue in myjsonobject:
    print mydict
    for mysubvalue in myvalue:
        print mysubvalue

Это печатает ключи словаря:

period
formationName
formationId
formationSlots
jerseyNumbers
playerIds
captainPlayerId
startMinuteExpanded
endMinuteExpanded
formationPositions

Когда то, что я действительно хочу, это значения. Я попытался заменить строку print mysubvalue на print mysubvalue.values(), однако это вызывает следующую ошибку:

Traceback (most recent call last):
  File "C:\Python27\counter.py", line 78, in <module>
    print mysubdict.values()
AttributeError: 'unicode' object has no attribute 'values'

Я делаю обоснованное предположение, что мне не нужно использовать json.loads(mysubdict), чтобы разрешить мне доступ к функции .values(). Если это так, я не уверен, почему я получаю эту ошибку.

Кто-нибудь может помочь?

Спасибо

16.01.2015

Ответы:


1

Если вы перебираете сам словарь (для myvalue в myjsonobject), вы будете перебирать ключи словаря. При работе с циклом for поведение будет одинаковым, независимо от того, перебираете ли вы сам dict (myjsonobject), myjsonobject.keys() или myjsonobject.iterkeys(). dict.iterkeys() обычно предпочтительнее, потому что он явный и эффективный:

for myvalue in myjsonobject.iterkeys():

16.01.2015

2

Вы перебираете ключи словаря JSON, а затем вызываете .values() для каждого ключа.

for myvalue in myjsonobject:

перебирает ключи. Поэтому, когда вы доберетесь до ключа, который является строкой, скажем, u'period' : 16, он напечатает 'period'.values(), что выдает эту ошибку, поскольку класс строки не имеет .values().

Если вы хотите сгладить весь словарь JSON до произвольной глубины, я бы предложил рекурсивный подход.

16.01.2015
  • всем привет. Не могли бы вы рассказать немного подробнее о том, о каком подходе вы думаете? 16.01.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..