Destructuring-свяжите содержание словаря

У вас есть две проблемы:

  1. Json недействителен. Там должны быть массивы, но их нет.
    Действительный json будет выглядеть следующим образом:
[
  {
    "Ukraine": [
      {
        "Credits": 500,
        "Name": "Clever goat",
        "Price": {
          "Amount": 100,
          "Currency": "UAH"
        }
      },
      {
        "Credits": 1000,
        "Name": "Smart hare",
        "Price": {
          "Amount": 190,
          "Currency": "UAH"
        }
      }
    ]
  },
  {
    "USA": [
      {
        "Credits": 500,
        "Name": "Clever goat",
        "Price": {
          "Amount": 10,
          "Currency": "USD"
        }
      },
      {
        "Credits": 1000,
        "Name": "Smart hare",
        "Price": {
          "Amount": 19,
          "Currency": "USD"
        }
      }
    ]
  }
]
  1. Свойство Price должно иметь тип Price, а не int.
public class Purchase
{
    public int Credits { get; set; }
    public string Name { get; set; }
    public Price Price { get; set; }
}
45
задан double-beep 31 January 2019 в 17:22
поделиться

5 ответов

Если вы опасаетесь проблем, связанных с использованием словаря местных жителей, и предпочитаете следовать своей исходной стратегии, Упорядоченные словари из коллекций python 2.7 и 3.1.OrderedDicts. позволяет восстанавливать элементы словаря в том порядке, в котором они были впервые вставлены

7
ответ дан 26 November 2019 в 21:03
поделиться

На основе @ShawnFumo отвечают, что я придумал это:

def destruct(dict): return (t[1] for t in sorted(dict.items()))

d = {'b': 'Banana', 'c': 'Carrot', 'a': 'Apple' }
a, b, c = destruct(d)

(Замечают порядок пунктов в dict)

0
ответ дан 26 November 2019 в 21:03
поделиться

Что ж, если вы хотите, чтобы это было в классе, вы всегда можете сделать это:

class AttributeDict(dict):
    def __init__(self, *args, **kwargs):
        super(AttributeDict, self).__init__(*args, **kwargs)
        self.__dict__.update(self)

d = AttributeDict(a=1, b=2)
2
ответ дан 26 November 2019 в 21:03
поделиться

Может быть, вы действительно хотите сделать что-то подобное?

def some_func(a, b):
  print a,b

params = {'a':1,'b':2}

some_func(**params) # equiv to some_func(a=1, b=2)
8
ответ дан 26 November 2019 в 21:03
поделиться

Не знаю, хороший ли это стиль, но

locals (). Update (params)

поможет. Затем у вас есть a , b и все, что было в вашем params dict, доступно как соответствующие локальные переменные.

0
ответ дан 26 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: