Как я могу добавить два значения в словаре? [Дубликат]

В Java, когда вы иногда запускаете JVM из командной строки с помощью исполняемого файла java и пытаетесь запустить программу из файла класса с открытым статическим void main (PSVM), вы можете столкнуться с ошибкой ниже, хотя classpath для JVM является точной и файл класса присутствует в пути к классам:

Error: main class not found or loaded

Это происходит, если файл класса с PSVM не может быть загружен. Одна из возможных причин этого заключается в том, что класс может реализовывать интерфейс или расширять другой класс, который не находится в пути к классам. Обычно, если класс не находится в пути к классам, то выдаваемая ошибка указывает как таковой. Но, если используемый класс расширен или реализован, java не может загрузить сам класс.

Ссылка: https://www.computingnotes.net/java/error-main-class -на-нашли или загружено /

6
задан MrROY 17 July 2013 в 04:58
поделиться

6 ответов

Один подход к словарю:

tmp = {}
# add as many as you like into the outermost array.
for outer in [arr1,arr2]:
    for inner in outer:
        start, rest = inner[0], inner[1:]
        # the list if key exists, else create a new list. Append to the result
        tmp[start] = tmp.get(start,[]) + rest

output = []

for k,v in tmp.iteritems():
   output.append([k] + v)

Это будет эквивалент полного внешнего соединения (возвращает данные с обеих сторон, даже если одна сторона равна нулю). Если вы хотите внутреннее соединение, вы можете изменить его на это:

tmp = {}
keys_with_dupes = []

for outer in [arr1,arr2]:
    for inner in outer:
        start, rest = inner[0], inner[1:]
        original = tmp.get(start,[])
        tmp[start] = original + rest
        if original:
            keys_with_dupes.append(start)

output = []

for k in keys_with_dupes:
   v = tmp[k]
   output.append([k] + v)
5
ответ дан cwallenpoole 27 August 2018 в 09:47
поделиться

Упорядочить свои данные по-другому (вы можете легко преобразовать то, что у вас уже есть, к двум dict s):

d1 = { '2011-10-10': [1, 1],
       '2007-08-09': [5, 3]
     }
d2 = { '2011-10-10': [3, 4],
       '2007-09-05': [1, 1]
     }

Затем:

d3 = { k : d1[k] + d2[k] for k in d1 if k in d2 }
5
ответ дан cwallenpoole 27 August 2018 в 09:47
поделиться

Если оба они очень большие, я бы использовал словарь:

arr1 = [
  ['2011-10-10', 1, 1],
  ['2007-08-09', 5, 3]
]

arr2 = [
  ['2011-10-10', 3, 4],
  ['2007-09-05', 1, 1]
]

table_1 = dict((tup[0], tup[1:]) for tup in arr1)
table_2 = dict((tup[0], tup[1:]) for tup in arr2)
merged = {}
for key, value in table_1.items():
    other = table_2.get(key)
    if other:
        merged[key] = value + other

В противном случае было бы более удобно сортировать каждый, а затем делать слияние таким образом. Но я предполагаю, что для большинства целей это будет достаточно быстро.

0
ответ дан Dan Lecocq 27 August 2018 в 09:47
поделиться

Вы можете преобразовать массивы в dict и обратно.

d1 = dict((x[0],x[1:]) for x in arr1)
d2 = dict((x[0],x[1:]) for x in arr2)
keys = set(d1).union(d2)
n = []
result = dict((k, d1.get(k, n) + d2.get(k, n)) for k in keys)
2
ответ дан jh314 27 August 2018 в 09:47
поделиться

Подход к функции генератора, пропускающий соответствующие элементы, даты которых не совпадают:

import itertools
def gen(a1, a2):
    for x,y in itertools.izip(a1, a2):
        if x[0] == y[0]:
            ret = list(x)
            ret.extend(y[1:])
            yield ret
        else:
            continue

>>print list(gen(arr1, arr2))
[['2011-10-10', 1, 1, 3, 4]]

Но, если возможно, упорядочивайте свои данные по-разному.

1
ответ дан Rao 27 August 2018 в 09:47
поделиться

Возможно, стоит упомянуть набор типов данных. поскольку их методы соответствуют типу проблемы. Операторы set позволяют легко и гибко объединять множества с полным, внутренним, внешним, левым и правым соединениями. Как и в словарях, наборы не сохраняют порядок, но если вы добавите набор обратно в список, вы можете применить порядок в объединении результатов. В качестве альтернативы вы можете использовать словарь o rded .

set1 = set(x[0] for x in arr1)
set2 = set(x[0] for x in arr2)
resultset = (set1 & set2)

Это приведет к объединению дат в исходных списках, для восстановления arr3 вам нужно добавить данные [1:] в arr1 и arr2, где даты указаны в результирующем наборе. Эта реконструкция не была бы столь же аккуратной, как использование словарных решений выше, но использование наборов заслуживает рассмотрения для подобных проблем.

2
ответ дан user3212761 27 August 2018 в 09:47
поделиться
Другие вопросы по тегам:

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