Как найти только СПЕЦИФИЧЕСКИЙ экземпляр строки в Python [duplicate]

Вы можете использовать json_decode () для преобразования строки json в объект / массив PHP.

Например.

Вход:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

Выход:

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

Несколько точек для запоминания:

  • json_decode требует, чтобы строка была действительной json, иначе она вернется NULL.
  • В случае отказа декодирования json_last_error() можно использовать для определения точного характера ошибки.
  • Сделать убедитесь, что вы перешли в utf8 контент, или json_decode может выйти из строя и просто вернуть значение NULL.

9
задан Mark Tolonen 18 April 2013 в 14:25
поделиться

5 ответов

Используйте метод update для счетчика. Пример:

from collections import Counter

data = '''\
ashwin programmer india
amith programmer india'''

c = Counter()
for line in data.splitlines():
    c.update(line.split())
print(c)

Выход:

Counter({'india': 2, 'programmer': 2, 'amith': 1, 'ashwin': 1})
16
ответ дан Mark Tolonen 22 August 2018 в 01:16
поделиться
  • 1
    +1 Только то, что я собираюсь опубликовать, - это позволяет использовать специализированный метод Counter.update и не требует чтения всего файла в памяти ... – Jon Clements♦ 26 February 2013 в 09:00
FILE_NAME = 'file.txt'

wordCounter = {}

with open(FILE_NAME,'r') as fh:
  for line in fh:
    # Replacing punctuation characters. Making the string to lower.
    # The split will spit the line into a list.
    word_list = line.replace(',','').replace('\'','').replace('.','').lower().split()
    for word in word_list:
      # Adding  the word into the wordCounter dictionary.
      if word not in wordCounter:
        wordCounter[word] = 1
      else:
        # if the word is already in the dictionary update its count.
        wordCounter[word] = wordCounter[word] + 1

print('{:15}{:3}'.format('Word','Count'))
print('-' * 18)

# printing the words and its occurrence.
for  (word,occurance)  in wordCounter.items(): 
  print('{:15}{:3}'.format(word,occurance))
0
ответ дан Fuji Clado 22 August 2018 в 01:16
поделиться

Использование параметра Defaultdict:

from collections import defaultdict 

def read_file(fname):

    words_dict = defaultdict(int)
    fp = open(fname, 'r')
    lines = fp.readlines()
    words = []

    for line in lines:
        words += line.split(' ')

    for word in words:
        words_dict[word] += 1

    return words_dict
1
ответ дан GrilledTuna 22 August 2018 в 01:16
поделиться

Вы повторяете каждую строку и вызываете счетчик каждый раз. Вы хотите, чтобы Counter запускал весь файл. Попробуйте:

from collections import Counter

with open("TEST.txt", "r"):
    contents = f.read().split()
print Counter(contents)
1
ответ дан kame 22 August 2018 в 01:16
поделиться
  • 1
    Возможно, лучше обработать файл по строкам ... – jadkik94 26 February 2013 в 08:58
  • 2
    @ jadkik94 Если он обрабатывает каждую строку внутри этого блока в любом случае, почему бы это изменить ситуацию? – Anorov 26 February 2013 в 09:01
  • 3
    @Anorov Что произойдет, если у вас есть 50-гигабайтный файл, который вы хотите подсчитать? (Просто так бывает, что у нас есть только 3 уникальных слова) .... – Jon Clements♦ 26 February 2013 в 09:01
  • 4
    @JonClements Я тоже собирался это сказать, даже если здесь вряд ли будет так. Но лучшая практика - лучшая практика ... – jadkik94 26 February 2013 в 09:06
  • 5
    Да, вы, ребята, на самом деле правы. Я забыл о поведении генератора по умолчанию. – Anorov 26 February 2013 в 09:33
from collections import Counter;
cnt = Counter ();

for line in open ('TEST.txt', 'r'):
  for word in line.split ():
    cnt [word] += 1

print cnt
8
ответ дан Mikhail Vladimirov 22 August 2018 в 01:16
поделиться
Другие вопросы по тегам:

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