Возможно, проблема в конфигурации почтового сервера, чтобы избежать подобных проблем или вам не нужно беспокоиться о проблеме с почтовым сервером, я рекомендую вам использовать PHPMailer , это плагин у которого есть все необходимое для отправки почты, единственное, что вы должны учесть, это иметь SMTP-порт (порт: 25 и 465), включен
require_once 'PHPMailer/PHPMailer.php';
require_once '/servicios/PHPMailer/SMTP.php';
require_once '/servicios/PHPMailer/Exception.php';
$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = 'correo@gmail.com';
$mail->Password = 'contrasenia';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
//Recipients
$mail->setFrom('correo@gmail.com', 'my name');
$mail->addAddress('destination@correo.com');
//Attachments
$mail->addAttachment('optional file'); // Add files, is optional
//Content
$mail->isHTML(true);// Set email format to HTML
$mail->Subject = utf8_decode("subject");
$mail->Body = utf8_decode("mail content");
$mail->AltBody = '';
$mail->send();
}
catch (Exception $e){
$error = $mail->ErrorInfo;
}
b = dict(zip(a[::2], a[1::2]))
Если a
велико, вы, вероятно, захотите сделать что-то вроде следующего, что не делает никаких временных списков, подобных приведенным выше.
from itertools import izip
i = iter(a)
b = dict(izip(i, i))
В Python 3 вы может также использовать понимание dict, но по иронии судьбы я думаю, что самый простой способ сделать это будет с range()
и len()
, который обычно будет запахом кода.
b = {a[i]: a[i+1] for i in range(0, len(a), 2)}
Итак, iter()/izip()
по-прежнему, вероятно, самый Pythonic в Python 3, хотя, как отмечает EOL в комментарии, zip()
уже ленив в Python 3, поэтому вам не нужно izip()
.
i = iter(a)
b = dict(zip(i, i))
Если вы хотите его на одной строке, вам придется обмануть и использовать точку с запятой. ; -)
Вы также можете попробовать этот подход сохранить ключи и значения в другом списке, а затем использовать метод dict
data=['test1', '1', 'test2', '2', 'test3', '3', 'test4', '4']
keys=[]
values=[]
for i,j in enumerate(data):
if i%2==0:
keys.append(j)
else:
values.append(j)
print(dict(zip(keys,values)))
:
{'test3': '3', 'test1': '1', 'test2': '2', 'test4': '4'}
Вы можете легко использовать это понимание:
a = ['hello','world','1','2']
my_dict = {item : a[index+1] for index, item in enumerate(a) if index % 2 == 0}
Это эквивалентно циклу for ниже:
my_dict = {}
for index, item in enumerate(a):
if index % 2 == 0:
my_dict[item] = a[index+1]
Мне также очень интересно иметь однострочный для этого преобразования, поскольку такой список является инициализатором по умолчанию для хэширования в Perl.
Исключительно полный ответ приведен в этом потоке -
Mine one Я новичок в Python), используя Python 2.7 Generator Expressions , будет:
dict((a[i], a[i + 1]) for i in range(0, len(a) - 1, 2))
fromkeys
. >>> dict.fromkeys(a, 2) {'bi': 2, 'double': 2, 'duo': 2, 'two': 2}
– Gdogg
7 September 2017 в 17:45
попробуйте ввести код:
>>> d2 = dict([('one',1), ('two', 2), ('three', 3)])
>>> d2
{'three': 3, 'two': 2, 'one': 1}
Я не уверен, что это pythonic, но, похоже, работает
def alternate_list(a):
return a[::2], a[1::2]
key_list,value_list = alternate_list(a)
b = dict(zip(key_list,value_list))
Что-то, что я нахожу довольно крутым, а это то, что если ваш список состоит всего из двух элементов:
ls = ['a', 'b']
dict([ls])
>>> {'a':'b'}
Помните, что dict принимает любой итерабельный, содержащий итерируемый, где каждый элемент в итерабельном должен быть истребитель с двумя объектами.
Не может быть самым пифоническим, но
>>> b = {}
>>> for i in range(0, len(a), 2):
b[a[i]] = a[i+1]
for i, key in enumerate(a[::2]):
. Тем не менее unpythonic, поскольку конструктор dict может сделать большую часть работы здесь для вас
– John La Rooy
1 January 2011 в 23:42
for i, key in enumerate(a[::2]):
подход? Результирующими значениями пары были бы 0 hello
и 1 1
, и мне непонятно, как их использовать для создания {'hello':'world', '1':'2'}
.
– martineau
29 January 2011 в 15:59
enumerate(a)[::2]
– John La Rooy
29 January 2011 в 23:32
Вы также можете сделать это так (строка для преобразования здесь, а затем переход в словарь)
string_list = """
Hello World
Goodbye Night
Great Day
Final Sunset
""".split()
string_list = dict(zip(string_list[::2],string_list[1::2]))
print string_list
Вы можете сделать это довольно быстро, не создавая дополнительные массивы, поэтому это будет работать даже для очень больших массивов:
dict(izip(*([iter(a)]*2)))
Если у вас есть генератор a
, еще лучше:
dict(izip(*([a]*2)))
Вот краткое изложение:
iter(h) #create an iterator from the array, no copies here
[]*2 #creates an array with two copies of the same iterator, the trick
izip(*()) #consumes the two iterators creating a tuple
dict() #puts the tuples into key,value of the dictionary
{'hello':'hello','world':'world','1':'1','2':'2'}
)
– mik
16 April 2018 в 15:29
#work~
`
a = ['Openstack','Puppet','Python']
b = {}
c = 0
for v in a:
b[v] = c
c+=1
print b
`
zip(i, i)
, в Python 3, так какzip()
теперь возвращает итератор. – Eric Lebigot 2 January 2011 в 01:07