Удаление тебя в списке - PullRequest
41 голосов
/ 19 марта 2012

Я прочитал об удалении символа 'u' из списка, но я использую Google App Engine, и он, похоже, не работает!

def get(self):
    players = db.GqlQuery("SELECT * FROM Player")
    print players
    playerInfo  = {}

    test = []

    for player in players:
        email =  player.email
        gem =  str(player.gem)
        a = "{email:"+email + ",gem:" +gem +"}"

        test.append(a)


    ast.literal_eval(json.dumps(test))
    print test

Окончательный вывод:

[u'{email:test@gmail.com,gem:0}', u'{email:test,gem:0}', u'{email:test,gem:0}', u'{email:test,gem:0}', u'{email:test,gem:0}', u'{email:test1,gem:0}']

Ответы [ 7 ]

46 голосов
/ 19 марта 2012

То, что 'u' является частью внешнего представления строки, то есть это строка Unicode, а не строка байтов. Это не строка, это часть типа.

Например, вы можете создать новый строковый литерал Unicode, используя тот же synax. Например:

>>> sandwich = u"smörgås"
>>> sandwich
u'sm\xf6rg\xe5s'

Это создает новую строку Unicode, значением которой является шведское слово для сэндвича. Вы можете видеть, что неанглийские символы представлены их кодовыми точками Unicode, ö равно \xf6 и å равно \xe5. Префикс 'u' появляется так же, как в вашем примере, чтобы показать, что эта строка содержит текст Unicode.

Чтобы избавиться от них, вам необходимо закодировать строку Unicode в какое-нибудь байтово-ориентированное представление, например UTF-8. Вы можете сделать это, например ::

>>> sandwich.encode("utf-8")
'sm\xc3\xb6rg\xc3\xa5s'

Здесь мы получаем новую строку без префикса 'u', так как это строка байтов. Он содержит байты, представляющие символы строки Unicode, а шведские символы дают несколько байтов из-за чудес кодировки UTF-8.

18 голосов
/ 29 сентября 2016
arr = [str(r) for r in arr]

Это в основном конвертирует все ваши элементы в строку.Следовательно, удаляет кодировку.Следовательно, u, представляющий кодировку, будет удален. Будет работать легко и эффективно

11 голосов
/ 19 марта 2012

U означает, что строки в кодировке Unicode.Переведите все строки в ascii, чтобы избавиться от них:

a.encode('ascii', 'ignore')
10 голосов
/ 29 октября 2015

u'AB' - это просто текстовое представление соответствующей строки Unicode. Вот несколько методов, которые создают одинаковую строку Unicode:

L = [u'AB', u'\x41\x42', u'\u0041\u0042', unichr(65) + unichr(66)]
print u", ".join(L)

Выход

AB, AB, AB, AB

В нет памяти u'' . Это просто способ представлять объект unicode в Python 2 (как вы бы записали строковый литерал Unicode в исходном коде Python ). По умолчанию print L эквивалентен print "[%s]" % ", ".join(map(repr, L)), т.е. repr() функция вызывается для каждого элемента списка:

print L
print "[%s]" % ", ".join(map(repr, L))

выход

[u'AB', u'AB', u'AB', u'AB']
[u'AB', u'AB', u'AB', u'AB']

Если вы работаете в REPL, тогда используется настраиваемый sys.displayhook, который вызывает repr() для каждого объекта по умолчанию:

>>> L = [u'AB', u'\x41\x42', u'\u0041\u0042', unichr(65) + unichr(66)]
>>> L
[u'AB', u'AB', u'AB', u'AB']
>>> ", ".join(L)
u'AB, AB, AB, AB'
>>> print ", ".join(L)
AB, AB, AB, AB

Не кодировать в байты. Печать Unicode напрямую .


В вашем конкретном случае я бы создал список Python и использовал бы json.dumps() для его сериализации вместо использования форматирования строки для создания текста JSON:

#!/usr/bin/env python2
import json
# ...
test = [dict(email=player.email, gem=player.gem)
        for player in players]
print test
print json.dumps(test)

выход

[{'email': u'test@gmail.com', 'gem': 0}, {'email': u'test', 'gem': 0}, {'email': u'test', 'gem': 0}, {'email': u'test', 'gem': 0}, {'email': u'test', 'gem': 0}, {'email': u'test1', 'gem': 0}]
[{"email": "test@gmail.com", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test1", "gem": 0}]
4 голосов
/ 28 февраля 2018
[u'{email:test@gmail.com,gem:0}', u'{email:test,gem:0}', u'{email:test,gem:0}', u'{email:test,gem:0}', u'{email:test,gem:0}', u'{email:test1,gem:0}']

'u' обозначает символы Юникода. Мы можем легко удалить это с помощью функции map в конечном элементе списка

map(str, test)

Другой способ, когда вы добавляете его в список

test.append(str(a))
4 голосов
/ 19 марта 2012

Вы не «удаляете символ« u »из списка», вы кодируете строки Unicode. На самом деле строки, которые у вас есть, идеально подходят для большинства применений;вам просто нужно соответствующим образом кодировать их перед выводом.

0 голосов
/ 01 февраля 2019

Для наборов данных Python вы можете использовать индекс.

tmpColumnsSQL = ("show columns in dim.date_dim")
hiveCursor.execute(tmpColumnsSQL)
columnlist = hiveCursor.fetchall()

for columns in jayscolumnlist:
    print columns[0]

for i in range(len(jayscolumnlist)):    
    print columns[i][0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...